Заставьте весь QNaN вместо этого быть обычным NaN (SNaN), чтобы генерировались исключения - PullRequest
9 голосов
/ 16 декабря 2010

Я настроил Visual Studio для выдачи исключений с плавающей запятой через функцию _controlfp.Это работает для NAN и INF, но не для QNAN.Т.е. тихие NaN не вызывают исключение.Есть ли какая-либо функция или опция конфигурации для Visual Studio 2008/2010, которая заставит QNAN вместо этого быть NAN, чтобы они генерировали исключения?

1 Ответ

1 голос
/ 16 декабря 2010

Несколько полезных советов, хотя я никогда даже не делал удаленно что-то вроде этого:

Чтение: http://www.cisl.ucar.edu/docs/trap.error/errortypes.html

Результирующий поиск в Интернете (который я действительно только потратилпримерно через 30 секунд), заставляет меня поверить, что это обычно включается с помощью опции компилятора.

Однако я также напоминаю, что такое включение / отключение ловушек может быть задано программно, особенно в Windows,это может быть сделано практически любой программой, например, когда для печати используется принтер.Кроме того, если вы измените эту опцию программно, как можно скорее установите для нее прежнее значение, иначе, если люди из .NET попытаются использовать ваш код, у них могут возникнуть проблемы.

(Другими словамиваше использование _controlfp может быть отменено другой подпрограммой, при условии, что это действительно правильный подход)

Также см. Visual Studio C ++ 2008/2010 - перерыв в плавающем NaN

...