Programming

floating point

9 ноя 2010 23:30
+20
(Текст записи скрыт. Показать...)
Случайно прочитал статью "What Every Computer Scientist Should Know About Floating-Point Arithmetic"


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

С другой стороны, часть "Differences Among IEEE 754 Implementations" в подробностях объясняет почему в общем нет и не будет совместимости fp вычислений между разными платформами.

Но по крайней мере теперь я чуть-чуть более уверен что скомпилированный код работает обычно одинаково. Теоретически в любой момент может вмешаться левая dll и изменить режим fpu, но "это" к счастью не встроено в систему изначально.

К сожалению остались открытыми вопросы, например на сколько вариантов распадаются разные реализации.
Типичный PC имеет возможность работать в "extended based" режиме если использовать инструкции x87, и в "single/double" если использовать sse. Т.е. теоретически можно (на низком уровне) реализовать некое вычисление в обоих вариантах, и тогда имея любую другую платформу и этот PC мы всегда можем установить между ними режим совместимости?

ps
Забавно, раньше как бы тоже был в курсе про представимые числа и использовал где надо, но после прочтения поменял несколько констант в не совсем необходимых местах, вроде 0.2 на 13.0/64 (отладочный инкремент времени). Как-то эстетичнее :)
Отправлено 02.12.2010 в 22:10
Отвечает на сообщение 360815
+2
Отловил смешной баг на одном радеоне:

имелся код VS_3_0 (упрощенно)

float y = max(max(y1,y2),y3)
float x;
if(y==y1) x=1;
if(y==y2) x=2;
if(y==y3) x=3;

Ни одно условие не выполнялось.
Неужели max теряет точность аргументов? Каким же алгоритмом нужно было его реализовать в железе, чтобы этого добиться.

К счастью, переписав это другим способом я даже сэкономил инструкций.
Списки доступа
  • Подписчики [675]
  • Белый список [19]
  • Черный список [3]
Права доступа
Вы можете читать группу, но не можете отвечать на сообщения и создавать новые темы.
Доступ для остальных:
анонимы : могут читать
новые : могут читать
постоянные : полный доступ

Copyright © 2021 ООО "ДТФ.РУ". Все права защищены.

Воспроизведение материалов или их частей в любом виде и форме без письменного согласия запрещено.

Замечания и предложения отправляйте через форму обратной связи.

Пользовательское соглашение