Скачать MetaTrader 5

Как быстро сравнить double и QNaN ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Maxim Kuznetsov
11798
Maxim Kuznetsov  

Есть функция double f() которая может вернуть QNaN SNaN и подобные not-a-number индицируя всякие обстоятельства, как можно быстро(и элегантно) выяснить что её результат именно конкретно QNaN ?

пока единственный вариант - через преобразование в long через копирование структур, но это-ж ужас-ужасный :-)

fxsaber
7620
fxsaber  
double Nan(long bit_value)
  {
   struct L { long   x; } l; l.x=bit_value;
   struct D { double x; } d=(D)l;
   return(d.x);
  }

double QNaN   =Nan(0x7FF7000000000000);   // QNaN 
Просто сравнить оператором ==.
Maxim Kuznetsov
11798
Maxim Kuznetsov  
fxsaber:
Просто сравнить оператором ==.

если бы было можно, я бы не спрашивал :-)

сравнение величин с QNAN всегда false

double Nan(long bit_value)
  {
   struct L { long   x; } l; l.x=bit_value;
   struct D { double x; } d=(D)l;
   return(d.x);
  }
double QNaN   =Nan(0x7FF7000000000000);  
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if (QNaN==QNaN) {
      Alert("QNaN is QNaN");
   } else {
      Alert("Ooops");
   }   
  }
fxsaber
7620
fxsaber  
Maxim Kuznetsov:

если бы было можно, я бы не спрашивал :-)

сравнение величин с QNAN всегда false

Прикольно, не знал! Ну тогда так
#include <TypeToBytes.mqh>

double Nan(long bit_value)
  {
   struct L { long   x; } l; l.x=bit_value;
   struct D { double x; } d=(D)l;
   return(d.x);
  }

double QNaN   =Nan(0x7FF7000000000000);  

void OnStart()
{
   if (_R(QNaN)==QNaN) {
      Alert("QNaN is QNaN");
   } else {
      Alert("Ooops");
   }   
}
fxsaber
7620
fxsaber  

Осталось незамеченным

double QNaN   =Nan(0x7FF7000000000000);  

Начальное значение глобальной переменной теперь можно объявлять через функцию!

То же самое касается и остальных static-переменных.

Странно, что разработчики про это нововведение умолчали. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий