Pull to refresh

Comments 4

В современных ЦП x64 есть инструкции FMA, способные идеально эмулировать такие операции


А смысл, если результат всё равно будет double и опять возникнет проблема двойного округления?
Или " современных ЦП x64" есть инструкции FMA именно над float?

А вообще в эмуляции всё ещё веселее. Например, в Playstation 2 плавающие числа реализованы не по IEEE, там при определенной операции (деление на 0 что ли, или 0/0) возникает другое число, а не то, что будет на компьютерных процах. И некоторые разрабы активно пользовались в играх подобных «хаком».
Или " современных ЦП x64" есть инструкции FMA именно над float?

И float и double есть в FMA.
Сохранение точности, кстати, по сути нарушает IEEE754.

Двойное округление имеет меньше проблем, если первое округление делать особым образом — в двоичном случае это round to nearest, ties to odd (а не even, как по умолчанию). Ещё это называется «фоннеймановское округление».
Реализовано, например, в IBM zSeries:

> Round to prepare for shorter precision: For a BFP or HFP (то есть двоичная арифметика), permissible set, the candidate selected is the one whose voting digit has an odd value. For a DFP permissible set (десятичная арифметика), the candidate that is smaller in magnitude is selected, unless its voting digit has a value of either 0 or 5; in that case, the candidate that is greater in magnitude is selected.

На x86 (любой разрядности), увы, такого не водится.
Малость неожиданный финал у истории. Ожидал увидеть в конце какой-нибудь хитрый алгоритм или «для этих целей в итоге пришлось разработать специальную схемотехнику/чип», ане «а фиг знает, как в итоге поступили».
Sign up to leave a comment.

Articles