Nan ind c как исправить
Перейти к содержимому

Nan ind c как исправить

Получение "-nan (ind)" при попытке сгенерировать случайные переменные

Я пытаюсь сгенерировать случайные переменные, пытаясь сгенерировать две стандартные нормальные переменные r1, r2, используя полярные координаты вместе со средним значением и значением сигмы. Однако, когда я запускаю свой код, я получаю на выходе «-nan (ind)».

Что я здесь делаю не так? Код выглядит следующим образом:

2 ответа

Итак, вы используете метод Box – Muller для псевдослучайной выборки нормальной случайной переменной. Чтобы это преобразование работало, r1 и r2 должны быть равномерно распределенными независимыми переменными в [0,1].

Вместо этого ваши r1/r2 поддерживаются [0,20], что приводит к отрицательному аргументу sqrt , когда> 1, это даст вам nans. Заменить

Более того, вам следует использовать C ++ 11 <random> для лучшей генерации псевдослучайных чисел; на данный момент ваш fRand имеет низкое качество из-за преобразования rand() — в — double и возможных ложных корреляций между соседними вызовами. Более того, в вашей функции отсутствует базовая проверка ошибок, она сильно зависит от глобальных переменных и по своей сути небезопасна для потоков.

К вашему сведению, вот как может выглядеть версия C ++ 11

R1 может быть нулевым, что делает log(r1) неопределенным.

Кроме того, не используйте rand() , кроме случаев, когда вам нужно, чтобы ваши числа выглядели случайными для спешащего человека. Вместо этого используйте <random>

Значение переменной -nan(ind)

Кто нибудь сталкивался с этим. В результате вычислений получил значение переменной -nan(ind).

Кто нибудь сталкивался с этим. В результате вычислений получил значение переменной -nan(ind).

nan это «не число»

ind — недействительное число

nan это «не число»

ind — недействительное число

Вычислял как раз числа. Видимо вышел за пределы допустимого размера числа.

Вычислял как раз числа. Видимо вышел за пределы допустимого размера числа.

В конце странички есть примеры, когда может вылезти

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)

  • www.mql5.com

В конце странички есть примеры, когда может вылезти

В статье по ссылке выше есть функция которая проверяет числа на действительность. Но мне это не поможет. 🙂 Ищу где ошибка в логике, которая приводит к такому результату. Решил полностью переписать этот кусок кода.

В статье по ссылке выше есть функция которая проверяет числа на действительность. Но мне это не поможет. 🙂 Ищу где ошибка в логике, которая приводит к такому результату. Решил полностью переписать этот кусок кода.

Да, я именно так и думал, что не хватило точности. Выводил отладочную информацию. В результате всех вычислений на N-ной итерации цикла число стало настолько маленькой, что привело к такому результату.

Да, я именно так и думал, что не хватило точности. Выводил отладочную информацию. В результате всех вычислений на N-ной итерации цикла число стало настолько маленькой, что привело к такому результату.

операции с «очень маленькими» числами не должны приводить к NaN кроме некоторых специально оговоренных случаев.

вообще про NaN и необходимость следования в какой-то мере стандартам, давно-давно давал заявку в СД. Получил ответ » результат операций с NaN неопределён, заявка закрыта». Поэтому чуствительную математику с той поры считаю не-mql программами.

операции с «очень маленькими» числами не должны приводить к NaN кроме некоторых специально оговоренных случаев.

вообще про NaN и необходимость следования в какой-то мере стандартам, давно-давно давал заявку в СД. Получил ответ » результат операций с NaN неопределён, заявка закрыта». Поэтому чуствительную математику с той поры считаю не-mql программами.

Не с точностью double в mql все нормально. Это уже мой косяк. Не учел особенности используемой функции. Функция график которой выглядит как гипербола от -1.0 до 1.0. Я хочу на выходе получить -1.0 и запускаю процесс подбора коэффициентов, но не учел особенности этой функции. На самом деле функция ни когда не достигает -1.0 или 1.0, а только стремится к ним. В результате получается что то типа -0.999999999999999999(9) , число превышающие максимально допустимую точность числа типа double.

Nan ind c как исправить

Gray Pipe

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

So I’m writing a code to solve for the two angles and missing side of a right triangle. The code has no errors and solves for my side ("c") perfectly. However for the angles it prints out -nan(ind). I have been in this class for a total of maybe 5 class meetings so i don’t know what is going on or how to fix it. So if anyone can plainly explain the issue as though i have no clue what any of the C++ terminology actually is. lol! thank you. Any help is great otherwise just don’t.

Here is the code:

#include <iostream>;
#include <cmath>;
using namespace std;
int main()
<
long double a, b, c, A, A1, B1, B, tot1, tot2, tot3;
char done, an;
cout << "input value of a \n";
cin >> a;
cout << "input value of b \n";
cin >> b;
tot1 = a*a + b*b;
c = sqrt(tot1);
cout << "c=" << c <<"\n";
tot2 = (b*b + c*c — a*a) / 2 * b*c;
A1 = acos(tot2);
A = A1 * 180 / 3.14;
cout << A << "\n";
cin >> done;
tot3 = (a*a + c*c — b*b) / 2 * a*c;
B1 = acos(tot3);
B = B1 * 180 / 3.14;
cout << B << "\n";
cin >> done;
cout << "C is equal to 90 degrees \n ";
system("pause");
return 0;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *