Процессор BFF-533 от Analog Devices не предлагает встроенную поддержку с плавающей запятой, но предлагает эмуляцию с плавающей запятой.
Используя IDE VisualDSP ++, пользователю разрешается выбирать между высокой производительностью с плавающей запятой и строгим соответствием IEEE.
Из того, что я понимаю, разница между этими двумя привести к другому представлению значения с плавающей запятой в памяти, поэтому я сделал следующий тест:
union TestType
{
float hello;
char test[4];
};
TestType tt;
tt.hello = 0.00123456789;
Я скомпилировал и запустил это с обоими параметрами, ожидая увидеть разные значения в тестовом массиве, но я получал одно и то же при каждом запуске:
Может кто-нибудь объяснить, почему я вижу то, что представляется представлением IEEE в обоих прогонах?
В документе, на который вы ссылаетесь, обсуждается пользовательский fastfloat16
тип. Вы используете родной float
введите здесь. Я не думаю, что они эквивалентны, независимо от настроек VisualDSP.
«Строгое соответствие IEEE» обычно интерпретируется как «даже крайние случаи обрабатываются правильно». Крайние случаи для IEE754 — это такие вещи, как денормалы, деление на ноль, бесконечности, не числа и т. Д. Один из примеров в IEEE754 NaN != NaN
, Это означает, что вы не можете сделать быстрое 32-битное сравнение. Другой пример — IEEE754 требует, чтобы основные математические операции были точными до последнего бита. При использовании схемы с плавающей запятой IEEE754 достигается значительное ускорение, но не математика IEEE754.
Других решений пока нет …