C # NotFiniteNumberException не работает - PullRequest
2 голосов
/ 15 февраля 2011

Я хочу, чтобы моя программа выдавала исключение, когда некоторая переменная с плавающей запятой достигает бесконечности или является Nan NotFiniteNumberException, который выглядит как решение, но есть проблема. Это

try
{
    Single x = 5;
    x = x / 0;
    x = x + 1;
}
catch (NotFiniteNumberException ex)
{
    //bla bla bla 
}

не будет ничего бросать.

Я знаю о IsNan и IsInfinity методах, но это не то, что я ищу.

Ответы [ 4 ]

7 голосов
/ 15 февраля 2011

Это потому, что ваше подразделение не бросит NotFiniteNumberException. Он просто вернет бесконечность для x.

Из документации NotFiniteNumberException :

NotFiniteNumberException доступно для языков программирования, которые не поддерживают понятия бесконечности и Not-a-Number в операциях с плавающей запятой.

C # поддерживает бесконечность и Not-a-Number для операций с плавающей запятой, поэтому это исключение здесь не применяется. Вам нужно вручную проверить значение x после выполнения деления.

0 голосов
/ 25 июля 2013

В качестве примечания: если вы хотите получить исключение для достижения inf или nan, посмотрите мой ответ с примером кода здесь: Как заставить компилятор C # генерировать исключение, когда любая математическая операция выдает 'NaN'?

Там установлены только исключения для NaN, но вы можете найти версию float.h для Visual Studio для других флагов, а здесь: http://www.fortran -2000.com/ArnaudRecipes/CompilerTricks.html#x86_FP для примера того, как их устанавливать.

Вы не получите исключение NotFiniteNumberException, а скорее System.ArithmeticException (протестировано на VS 2012).

0 голосов
/ 15 февраля 2011

NotFiniteNumberException существует только как поддержка языков, которые изначально не поддерживают бесконечность. C # никогда не выбросит это исключение. См. здесь для одного примера.

0 голосов
/ 15 февраля 2011

Эххх,

x = x / 0;

вызовет «DivisionByZeroException», так что вы не будете здесь много ловить.

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