Почему этот код неправильно вычисляет sin (x)?

Я собираюсь сойти с ума. Я смотрел на это часами и не могу понять, что не так. Когда я ввожу значение «1», я просто получаю, что сумма равна 1, а это означает, что он прошел это итерацию только один раз, но я не знаю, почему вижу, что abs (термин) должен быть больше, чем » меньшее».

Я пытаюсь вычислить грех (х), учитывая пользовательские входы х.

double sum = 0.0;
double term = 0.0;
double n = 1.0;
double x = 0.0;
double lesser = 1.0e-15;while (true)
{
std::cout << "\nEnter radian value of x:";
std::cin >> x;
if (x == 999)
return 0;

term = x;
sum = 0.0;
n = 1.0;

while (abs (term) >= lesser)
{
sum = sum + term;
n = n + 1.0;
term = -term * (x/n);
n = n + 1.0;
term = term * (x/n);

}
std::cout << "\nApproximation for sin(0) is is: " << sum;
}return 0;

1

Решение

std::abs функция работает на целочисленных типах. Вы, вероятно, должны использовать std::fabs:

while (fabs (term) >= lesser) {
...
}

В коде могут быть другие ошибки, но эта, вероятно, приведет к преждевременному завершению цикла, поскольку abs округляет значения в диапазоне (0, 1) до 0. fabs избегает этого

В качестве альтернативы используйте <cmath> заголовок вместо <math.h> заголовок или явный вызов std::abs, <cmath> экспортные перегрузки abs для значений с плавающей точкой.

Надеюсь это поможет!

3

Другие решения

использование fabsне abs, abs для целых чисел и убивает дробную часть вашего числа. Или вы можете использовать std::abs

0

По вопросам рекламы [email protected]