@royalfest52

Си. Какой из вариантов высчитывает более точное значение?

Решил задачу:
int _tmain(int argc, _TCHAR* argv[])
{	int i,z;
	float x,s,n,q,y,m;



	s=0;n=0;z=1;
	for(i=0;i<10000;i++)
	{
		n=n+1.0;
		x=1.0/(n*z);
		s=s+x;
		z=z*(-1);
	}
	cout<<s<<"\n";




	//Б
	s=0; n=2.0; x=0; y=0; m=1.0; q=0;
	for (i = 1; i<5000; i++)
	{
		//чётные знаменатели
		x = 1.0 / n;
		s = s + x;
		n = n + 2.0;
		
		//нечётные знаменатели
		y=1.0/m;
		q=q+y;
		m=m+2.0;
	}
	s = q - s;
	cout << s<<"\n";




	//В
	s = 0; n = 10000; x=0; z = (-1);
	for (i = 10000; i>0; i--)
	{
		x = (1.0 / n)*z;
		s = s + x;
		n = n - 1.0;
		z = z * (-1);
	}
	cout << s << "\n";




	//Г
	s = 0; n = 10000; x=0; q=0; y=0; m=9999;
	for (i = 5000; i>0; i--)
	{
		x = 1.0 / n;
		s = s + x;
		n = n - 2.0;

		y = 1.0 / m;
		q = q + y;
		m = m - 2.0;
	}
	s = q - s;
	cout << s <<"\n";


	return 0;
}


Считает правильно, всё работает, но нужно определить у какого из вариантов подсчёта наибольшая точность вычислений, я вообще не понимаю каким образом это нужно сделать, помогите пожалуйста
И ещё нужно ответить на вопрос - Почему получаются разные результаты в данных вариантах, тоже не понимаю, прошу подскажите в чём тут дело, заранее огромное спасибо!

И прикладываю сам текст задачи для наглядности:
5b0d92e9d3bbe345814223.png
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
myjcom
@myjcom
long double вместо float
spoiler
и язык С++ в Cи нет cout
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
"Помните, что не все десятичные числа имеют двоичное представление с плавающей запятой. Например, число «0,2» будет представлено как «0,200000003» в одинарной точности. Соответственно, «0,2 + 0,2 ≈ 0,4». Абсолютная погрешность в отдельном случае может и не высока, но если использовать такую константу в цикле, можем получить накопленную погрешность."
(C) Что нужно знать про арифметику с плавающей запятой
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы