Плавающая точка в .NET - часть 1: принципы и форматы - Другие части стандарта

ОГЛАВЛЕНИЕ


Другие части стандарта

В дополнение к числовым форматам, стандарт IEC 60559 также точно определяет поведение стандартных арифметических операций +, -, *, /, и квадратного корня.

Он также указывает детали округления. Существует четыре возможных способа округлить число, так называемые режимы округления:

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

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

Исключения также являются часто неиспользуемой функциональностью. Исключения являются индикатором того, что что-то неожиданное произошло во время вычислений. Исключения не являются критическими ошибками (фатальными) - устанавливается флаг и возвращается стандартное значение. Всего существует пять исключений:

Исключение Ситуация Возвращаемое значение
Invalid operation (неверная операция) Операнда неверна для выполнения данной операции. NaN
Division by zero (деление на ноль) Попытка выполнить деление ненулевого значения на ноль. Бесконечность (1/-0 = отрицательная бесконечность)
Overflow (переполнение) Результат операции слишком велик для отображения в формате с плавающей точкой. Положительная или негативная бесконечность.
Underflow (ошибка обнуления) Результат операции слишком мал для отображения в формате с плавающей точкой. Положительный или отрицательный ноль.
Inexact (неточность) Результат округления операции не точен. Подсчитанное значение.

Возвращаемое значение в случае с переполнением или ошибкой обнуления на самом деле зависит от режима округления. Значения отображены для случая округления к ближайшему, что установлено по умолчанию.

Исключения ведут себя также, как переполнения целых значений в CLR. По умолчанию никакие действия не применяются в случае переполнения. Тем не менее, в проверяемом контексте, исключения создаются при возникновении целочисленной перегрузки. Аналогично, IEEE-754/IEC 60559 определяет механизм передачи контроля специальному обработчику в случае возникновения исключения.