zedxxx
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ludens System.SysUtils.EUnderflow Цитата: When a floating-point math operation produces a value that is too small to be represented in a floating-point variable, the result ordinarily becomes zero. EUnderflow is raised when the processor reports an underflow hardware exception. | Исключение генерирует процессор, когда в результате математических операций число становится настолько малым, что не может быть представлено числом с плавающей точкой и стремится к нулю. Однако, в Delphi 10.3 (как минимум) этот тип исключений добавлен в игнорируемые по-умолчанию: Код: VMask: TArithmeticExceptionMask; ... VMask := GetExceptionMask; // -> [exDenormalized,exUnderflow,exPrecision] | и ошибка не генерируется, а просто подставляется 0. Если же отключить игнорирование, то ошибка появляется: Код: SetExceptionMask([exDenormalized,exPrecision]); VFloat := MinDouble; VFloat := VFloat / 3; // -> EUnderflow |
| Всего записей: 1505 | Зарегистр. 14-07-2008 | Отправлено: 09:10 17-07-2019 | Исправлено: zedxxx, 09:20 17-07-2019 |
|