Получение "-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 — недействительное число
Вычислял как раз числа. Видимо вышел за пределы допустимого размера числа.
Вычислял как раз числа. Видимо вышел за пределы допустимого размера числа.
В конце странички есть примеры, когда может вылезти

- 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 как исправить
![]()
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;