У меня проблема с определением исключения с плавающей точкой - PullRequest
0 голосов
/ 15 июня 2010

Я использую c ++ в Visual Studio Express для генерации деревьев случайных выражений для использования в программах с генетическим алгоритмом.

Поскольку они случайные, деревья часто генерируют (я назову их исключениями, я не уверен, что они есть)

Благодаря предложению Джорджа я включил маску _MCW_EM, чтобы аппаратные прерывания были отключены. (по умолчанию)

Итак, программа работает непрерывно, но некоторые возвращаемые значения: -1. # INF, -1. # NAN, -1. # INV.

Я не знаю, как их идентифицировать, чтобы я мог выбросить исключение:

if ( variable == -1.#INF) ??

DigitalRoss в этом посте казалось, что есть решение, но, как я понял, я не смог заставить его работать.

Я искал повсюду этот простой кусочек кода, который, как я предполагал, будет использоваться все

время, но не повезло.

спасибо

Ответы [ 3 ]

1 голос
/ 15 июня 2010

Попробуйте это:

#include <limits>
if( variable == numeric_limits<float>::infinity() )
  return 1;
0 голосов
/ 16 июня 2010

В Windows вы можете использовать API-вызовы "_isnan ()" и "_finite ()".

http://msdn.microsoft.com/en-us/library/aa298428%28VS.60%29.aspx
http://msdn.microsoft.com/en-us/library/aa246875%28v=VS.60%29.aspx

0 голосов
/ 16 июня 2010

Спасибо KennyTM за обнаружение дубликата.Ссылка в ссылке ответила на мой запрос.

Я использовал:

# include "limit.h"

# include "math.h"

bool isIndeterminate(const double pV) 
{ 
    return (pV != pV); 
};  

bool isInfinite(const double pV) 
{ 
    return (pV >= DBL_MAX || pV <= -DBL_MAX); 
}; 

Поскольку ответ KennyTM был комментарием, я (возможно, немного самонадеянно) отвечаю на свой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...