Плавающая точка в .NET - часть 1: принципы и форматы - Другие части стандарта
ОГЛАВЛЕНИЕ
Другие части стандарта
В дополнение к числовым форматам, стандарт IEC 60559 также точно определяет поведение стандартных арифметических операций +, -, *, /, и квадратного корня.
Он также указывает детали округления. Существует четыре возможных способа округлить число, так называемые режимы округления:
- в направление к ближайшему числу (округление вниз или вверх, в зависимости от того, что даст меньшую ошибку)
- округление к нулю (округление вниз для положительных чисел и вверх для отрицательных)
- в направление к положительной бесконечности (всегда вверх)
- в направлении к отрицательной бесконечности (всегда вниз)
В общем, первый режим приведет к наименьшей погрешности округления, потому это условный стандарт для большинства компиляторов. Тем не менее, он наименее предсказуем. Другие методы округления обладают более предсказуемыми свойствами. В некоторых случаях, гораздо легче компенсировать погрешность округления используя данные методы.
Исключения также являются часто неиспользуемой функциональностью. Исключения являются индикатором того, что что-то неожиданное произошло во время вычислений. Исключения не являются критическими ошибками (фатальными) - устанавливается флаг и возвращается стандартное значение. Всего существует пять исключений:
Исключение | Ситуация | Возвращаемое значение |
---|---|---|
Invalid operation (неверная операция) | Операнда неверна для выполнения данной операции. | NaN |
Division by zero (деление на ноль) | Попытка выполнить деление ненулевого значения на ноль. | Бесконечность (1/-0 = отрицательная бесконечность) |
Overflow (переполнение) | Результат операции слишком велик для отображения в формате с плавающей точкой. | Положительная или негативная бесконечность. |
Underflow (ошибка обнуления) | Результат операции слишком мал для отображения в формате с плавающей точкой. | Положительный или отрицательный ноль. |
Inexact (неточность) | Результат округления операции не точен. | Подсчитанное значение. |
Возвращаемое значение в случае с переполнением или ошибкой обнуления на самом деле зависит от режима округления. Значения отображены для случая округления к ближайшему, что установлено по умолчанию.
Исключения ведут себя также, как переполнения целых значений в CLR. По умолчанию никакие действия не применяются в случае переполнения. Тем не менее, в проверяемом контексте, исключения создаются при возникновении целочисленной перегрузки. Аналогично, IEEE-754/IEC 60559 определяет механизм передачи контроля специальному обработчику в случае возникновения исключения.