angusmax Ответов: 1

Автоматическое повышение исключения для значений NaN или Infinity


У меня есть длинная последовательность вычислений (с использованием переменных типа "double"), где некоторые операции могут привести (в зависимости от входных значений) к "NaN" или "Infinity".
Поскольку я не хочу добавлять что-то вроде следующего:
if ((double.IsInfinity(result)) || (double.NaN(result))) {
...
}

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

Я попробовал это сделать:
Вы также можете попробовать включить функцию "проверить арифметическое переполнение/недостаточный поток"." Он находится в свойствах вашего проекта, в разделе "Build->Advanced Build Settings"
Когда он включен, арифметические исключения будут выдаваться для переполнения и недостаточного потока (вместо обертывания). Это может относиться или не относиться к функции ln. Дай ему попробовать.

а это:
Чтобы перехватить, где генерируется конкретное исключение, вы можете (временно) прервать работу, когда исключение генерируется в отладчике.
Выберите debug &ГТ; исключения разверните дерево и выберите среды CLR исключения и gt; Система > В системе.ArithmeticException и отметьте опцию "брошенный".

но все равно никаких исключений не возникало после деления на ноль.
Есть предложения?
Спасибо.

1 Ответов

Рейтинг:
2

Ahmed Bensaid

Привет,

Я думаю, что вам нужно будет поднять исключение самостоятельно, как это :

if ((double.IsInfinity(result)) || (double.NaN(result))) {
   throw new ArithmeticException();
}