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

 

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

 
Vitalii Ananev:

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

nan это "не число"

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

 
Igor Zakharov:

nan это "не число"

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

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

 
Vitalii Ananev:

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

https://www.mql5.com/ru/docs/basis/types/double

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

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...
 
Igor Zakharov:

https://www.mql5.com/ru/docs/basis/types/double

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

Спасибо.

 
есть простой способ проверить переменную double на предмет недействительного числа:

double x;
...
if (x!=x)  Print("Error");
 
Nikolai Semko:
есть простой способ проверить переменную double на предмет недействительного числа:

double x;
...
if (x!=x)  Print("Error");

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

 
Vitalii Ananev:

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

содержимое этой функции и есть return(x==x).
Эта проверка  и позволяет поймать момент "ошибки". Это бывает не всегда ошибка, а просто причиной переполнения(нехватки точности) типа double.
 
Nikolai Semko:
содержимое этой функции и есть return(x==x).
Эта проверка  и позволяет поймать момент "ошибки". Это бывает не всегда ошибка, а просто причиной переполнения(нехватки точности) типа double.

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

 
Vitalii Ananev:

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

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

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

 
Maxim Kuznetsov:

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

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

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