-nan(ind) в результате вычислений
У меня есть задача с некоторыми числовыми вычислениями и аппроксимацией дифф. уравнения, в частности используется такие библиотечные функции, как Zeroin, Rkf45, Spline, SEval и quanc8, написанные на C. Подключенные к проекту на C++ так:
При запуске программы массив выходных значений выдает -nan(ind). Однако в процессе лютой ярости программа была запущена несколько раз без каких-то изменений и в один из запусков массив результата выдал существующие значения.
В результате, каждые 10-15 запусков программа считает все правильно. Понимаю, что вопрос без кода достаточно абстрактный, так что прикладываю ссылку с паролем на pastebin. Я знаю, что nan — это результат неверных вычислений, но почему после неоднократного перезапуска программа выдавала (и продолжает выдавать) верные математические результаты? С чем это может быть связано?
Ответы (1 шт):
Обычно если вы пользуетесь Visual Studio, он выдает -nan(ind) когда что-то вышло за границы переменной которую вы используете.
Для примера можно взять факториал и если будет стоять тип int и Вы введете 20 то тоже напишет в результате -nan(ind).
Nan ind c как исправить
So I’m writing a program that demonstrates Newton’s method to find a root of an equation. It outputs the estimated value of the root, the the true error and empirical error. After trying to run the program, the true error and estimated error were outputting «-nan(ind)». I stepped through my program and found out that the original function for Newton’s method was returning this «-nan(ind)». What is «-nan(ind)» and how do I avoid it in this program?
Here’s the code for the equation and it’s first derivative. I’m using recursion even though it’s less straightforward because I honestly need more practice in recursion and this gave me a great excuse to try it.
Your original routine newton( ) — your original post — does not return ANYTHING unless count = 20.
To remedy this, simply insert
return estroot;
at the end of this function (between lines 23 and 24 in your original post).
When I checked it, your program then worked.
There are multiple potential problems with your approach.
— Just change your original line 19 to plain
else
Then at least one option will be followed.
— Your method is BISECTION and not NEWTON-RAPHSON (aka Newton’s method).
— It would be far better done by iteration than recursion.
— You don’t check that your original aval and bval actually span the root.
Почему возникает ошибка nan(ind)? [закрыт]
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 2 года назад .
Пытаюсь привести матрицу к треугольному виду. На входе
// на входе принимается размер матрицы
Потому что вы делите на 0.
и убедитесь в этом сами.
Что и неудивительно — ведь матрица
вырожденная, ее определитель равен 0.
P.S. Что-то странный у вас вложенный цикл
нет? i во вложенном цикле скрывает i из внешнего, да и дальнейшее вызывает сомнения. int z = a[i][y]; тоже как-то не комильфо 🙂 — зачем double до int обрезать?
Но главное — какой смысл в проверках до преобразований? Ведь именно в их процессе очередной опорный элемент может стать нулевым! Возьмите простую матрицу, типа
и вручную убедитесь, что первая ваша проверка работает, но уже после первой итерации преобразований вы получите нулевую вторую строку — и никаких проверок такой неприятности у вас уже нет.