| Предыдущий | Следующий |
| 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 и убедитесь, что исключение не появилось только после изменения масок библиотекой.
Исправление
Проверка знаменателя должна соответствовать математике алгоритма: сравнение с точным нулём и проверка малой величины — разные решения. После изменения повторите тот же набор данных и отдельно проверьте граничные значения, чтобы не превратить деление на ноль в скрытую потерю точности.
Технические ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
