Показать сообщение отдельно
  #4 (permalink)  
Старый 13.03.2018, 19:18
Интересующийся
Отправить личное сообщение для Noga_programmista Посмотреть профиль Найти все сообщения от Noga_programmista
 
Регистрация: 13.03.2018
Сообщений: 17

Проверил на онлайн калькуляторе... вроде погрешности округления небольшие (нас учили что если точность имеет N знака после запятой, то округляем до N+1 знаков)
Все переменные по вашей формуле названы
var exp = 0.001; // точность
		var summ = 0; // переменная для суммы
		var count ; // переменная для кол-во соагаемых

		//считает одно слагаемое
		function get_value(x, a, k) 
		{
			return +( Math.sin( Math.pow(x, k)) / ( Math.pow(a, 2*k) * fac(2*k) ) ).toFixed(4);
		}
		// считает сумму
		function Summ(x, a, k)
		{  
			if(k == 1)//при первом витке сравнивать на точность еще нечего
			{
				return get_value(x, a, k) + Summ(x, a, k+1);
			}
			else{
				if( Math.abs(get_value(x, a, k) - get_value(x, a, k-1)) > exp  )  // |An – An-1| > exp, пока это выражение
				{                                                                 // истинно, вычисления продолжаются.
					return get_value(x, a, k) + Summ(x, a, k+1);
				}
				else{
					count = k;
					return get_value(x, a, k);
				}
			}

			
		}
		// (2k) не может быть отричательным, 
		// поэту проверку на отрицательность не делал
		function fac(num)
		{
			if(num == 1 || num == 0)
			{
				return 1;
			}
			return num * fac(num - 1);
		}

		alert("Сумма = " + Summ(15, 2, 1) +"\nЧисло циклов(при точности " + exp + ") равно : " + count);

Последний раз редактировалось Noga_programmista, 14.03.2018 в 12:31.
Ответить с цитированием