Я собираюсь сойти с ума. Я смотрел на это часами и не могу понять, что не так. Когда я ввожу значение «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;
std::abs
функция работает на целочисленных типах. Вы, вероятно, должны использовать std::fabs
:
while (fabs (term) >= lesser) {
...
}
В коде могут быть другие ошибки, но эта, вероятно, приведет к преждевременному завершению цикла, поскольку abs
округляет значения в диапазоне (0, 1) до 0. fabs
избегает этого
В качестве альтернативы используйте <cmath>
заголовок вместо <math.h>
заголовок или явный вызов std::abs
, <cmath>
экспортные перегрузки abs
для значений с плавающей точкой.
Надеюсь это поможет!
использование fabs
не abs
, abs
для целых чисел и убивает дробную часть вашего числа. Или вы можете использовать std::abs