2010-01-18 2 views
11

Хотя, насколько я помню, IEEE 754 ничего не говорит о режиме «flush-to-zero», чтобы обрабатывать denormalized numbers быстрее, некоторые архитектуры предлагают этот режим (например, http://docs.sun.com/source/806-3568/ncg_lib.html).поведение в режиме «с нуля» в арифметике с плавающей точкой

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

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

В этом контексте, мой вопрос имеет два аспекта: есть

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

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

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

+0

Хороший вопрос, хорошо сказано. Я не специалист по встроенным системам, но я подозреваю, что нет четкого ответа. Это зависит исключительно от конкретной среды конечного пользователя. – GManNickG

ответ

7

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

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


Редактировать дополнительно объяснение ЗСТ против DAZ:

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

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

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

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

+0

Сегодня я реализовал интервальную арифметику, которая сразу охватывает все возможности FTZ, DAZ (промывка до нуля +0 или одинакового знака) и субнормальные явления IEEE 754. Ни один из наших тестов на регрессию не показал различий по сравнению с предыдущей арифметикой IEEE 754. Поэтому, вероятно, не обязательно беспокоить пользователей с возможностью для этого, новый режим должен сделать всех счастливыми. Это очень хорошая вещь. Еще раз спасибо! –

+0

Удивительный, рад помочь. –

+0

Какова была бы практичность выполнения математики с плавающей запятой, чтобы любые биты мантиссы, которые представляли значения, меньшие наименьшего нормированного значения, округлялись? Я думаю, что это может быть дешевле, чем иметь дело с денормализованными значениями, поскольку все числа с плавающей запятой будут иметь одинаковое представление. Только этап «окончательной очистки» должен измениться. – supercat

2

Сердечники ARM Cortex имеют опцию сброса до нуля, трудно понять, как вы можете ее игнорировать. Опять же, не принимайте бизнес-консультации с форума. Поговорите со своими клиентами.

+0

Существующие пользователи замечательные, они используют разумные платформы, понимают проблемы с плавающей запятой, и они идут на длительность деактивации бесшумной генерации 'fmadd' своим компилятором, чтобы сделать ошибки округления более предсказуемыми. Это потенциальные пользователи, которых я интересую. Спасибо за ваши отзывы. –