Site icon EfmSoft

Что означает код NTSTATUS 0xC000008E (STATUS_FLOAT_DIVIDE_BY_ZERO)?

 
Предыдущий Следующий
STATUS_FLOAT_DENORMAL_OPERAND STATUS_FLOAT_INEXACT_RESULT

STATUS_FLOAT_DIVIDE_BY_ZERO

Что означает STATUS_FLOAT_DIVIDE_BY_ZERO

STATUS_FLOAT_DIVIDE_BY_ZERO возникает при незамаскированном делении с плавающей точкой, когда знаменатель равен нулю. Важно отличать его от STATUS_FLOAT_INVALID_OPERATION: например, выражение 0/0 относится уже к недопустимой операции.

Что проверить

  • Сохраните числитель и знаменатель непосредственно перед faulting instruction, включая их битовое представление.
  • Проследите, почему знаменатель стал нулём: пришёл таким во входных данных, получен предыдущим вычислением либо очень малое значение было сведено к нулю режимом FTZ/DAZ.
  • Проверьте FP control state текущего thread и убедитесь, что исключение не появилось только после изменения масок библиотекой.

Исправление

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

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.

Exit mobile version