@DsTs

Почему степенной ряд оканчивается NaN?

Почему при практически любом вводимом числе и низкой погрешности(<1) данный степенной ряд оканчивается NaN? При этом в результате итераций цикла while, идущих перед последней, выводится число, соответствующее стандартной функции (sinx/x)

Console.WriteLine("Введите x");
double x = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите погрешность");
double t = Convert.ToDouble(Console.ReadLine());

double sin = 1;
double step = 1;


while (Math.Abs(sin) >= t)
{

sin += Math.Pow(-1, step) * (Math.Pow(x, step * 2) / Fact((step * 2) + 1));
Console.WriteLine($"{step} Наша функция {sin}");
step++;
}
факториал:
static double Fact(double a)
{
double fact = 1;
for (double i = 1; i <= a; i++)
{
fact *= i;
}
return fact;
}
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 2
NikFaraday
@NikFaraday
Student full-stack Developer
Во-первых, код нужно предоставлять в специальном блоке
Во-вторых, где вывод? На какой итерации у вас получается NaN? На 0-й? На 1-й?

Во-третьих, когда диапазон допустимых числе double превышается, вы  получаете NaN (Скорее всего в этом и проблема)
Ответ написан
Комментировать
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
Это значит на каком-то шаге (последнем) где-то получился double.NaN.
Скорее всего это случилось здесь - Math.Pow(x, step * 2) / Fact((step * 2) + 1), т.к. факториал растет гораздо быстрее степенной функции и получилось так, что деление вернуло 0

Попробуй использовать decimal вместо double, но тогда придется писать свою функцию возведения в степень (Math.Pow только с double работает)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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