поведение сброса к нулю в арифметике с плавающей точкой

В то время как, насколько я помню, IEEE 754 ничего не говорит о режиме сброса к нулю для обработки денормализованных чисел быстрее, некоторая архитектура предлагает этот режим (например, http://docs.sun.com/source/806-3568/ncg_lib.html).

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

Я работаю над статическим анализатором для встроенного C, который пытается предсказать корректный (если иногда неточный), располагается для значений, которые могут произойти во времени выполнения. Это стремится быть корректным, потому что это предназначается, чтобы быть применимым для исключения возможности чего-то идущего не так, как надо во времени выполнения (например, для критического встроенного кода). Это требует получавший все возможные поведения во время анализа и поэтому все возможные значения, произведенные во время вычислений с плавающей точкой.

В этом контексте мой вопрос является двукратным:

  1. среди встроенной архитектуры, там архитектура то предложение только сброс к нулю? Они не должны были бы, возможно, исправляться для рекламы себя как "IEEE 754", но могли предложить достаточно близко IEEE операции с плавающей точкой с 754 стилями.

  2. Для архитектуры, которая предлагает обоим во встроенном контексте, сброс к нулю, вероятно, не будет активирован системой для создания времени реакции более предсказуемым (общее ограничение для этих встроенных систем)?

Обработка сброса к нулю в арифметике интервала, которую я использую для значений с плавающей точкой, достаточно проста, если я знаю, что должен сделать это, мой вопрос состоит больше в том, должен ли я сделать это.

13
задан Pascal Cuoq 18 January 2010 в 03:20
поделиться

2 ответа

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

Вы также должны знать, что многие встроенные платформы DSP используют «Denormals - это нулевой» режим, который является еще одной морщин в семантике с плавающей запятой.


Отредактируйте Дальнейшее объяснение FTZ VS. DAZ:

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

В DAZ, когда вход к операции представляет собой денормал, ноль заменяется на его месте. Опять же, нет общей гарантии, о которой нулевой будет замещенный.

Некоторые реализации, которые поддерживают эти режимы, позволяют им быть установлены независимо (и некоторые поддерживать только один из двух), поэтому вам может быть необходимость сможет моделировать либо независимо, а также вместе.

Обратите внимание, что некоторые реализации объединяются эти два режима в «Flush до нуля». Режим ARM VFP «Flush до нуля» является как FTZ, так и DAZ, например.

8
ответ дан 2 December 2019 в 01:21
поделиться

Ядра ARM Cortex имеют опцию flush to zero, трудно увидеть, как вы можете ее проигнорировать. И опять же, не прислушивайтесь к бизнес-советам с форума. Поговорите со своими клиентами.

2
ответ дан 2 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: