Разница между округлением FPU и разрывом связей

В чем (если есть) разница между округлением до целого числа и режимы разрыва связей, описанные в статья в Википедии? В стандарте IEEE-754-2008 такого различия нет ( хотя я только мельком просмотрел его). В управляющем слове FPU такого различия нет.

Итак, возможна ли архитектура, которая округляет целые числа не так, как разрывает связи? Используются ли такие архитектуры в настоящее время?


person the swine    schedule 18.07.2014    source источник


Ответы (2)


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

person tmyklebu    schedule 18.07.2014
comment
Хорошо, но как они относятся к реализации IEEE с плавающей запятой? Реализуются ли они отдельно или FPU всегда использует одну и ту же стратегию для округления и разрешения конфликтов? - person the swine; 18.07.2014
comment
В x87 есть округление вверх, округление вниз, усечение и округление до ближайшего разрыва связей с использованием округления до четности. - person tmyklebu; 18.07.2014
comment
И завязывает с нуля (по крайней мере, версия 2008 года). - person the swine; 18.07.2014
comment
Это на самом деле отвечает на вопрос, хотя мне пришлось прочитать его раз пять и заснуть, чтобы начать понимать правильно. - person the swine; 18.07.2014
comment
Режимы округления AFAIK применяются не только к округлению до целого числа, они также применяются к округлению, которое должно иметь место после операции с плавающей запятой, чтобы округлить лишние биты промежуточного результата до точности, разрешенной для данного типа. - person Rudy Velthuis; 19.07.2014
comment
@RudyVelthuis да, поэтому я написал свой собственный ответ, в котором подчеркивается, что - person the swine; 19.07.2014
comment
Нет, это не то, что вы написали в своем ответе. В вашем ответе рассматривается только округление до целого числа, если только вы не имеете в виду наименее значащее представленное десятичное число. Округление производится в двоичном формате, а не в десятичном. - person Rudy Velthuis; 19.07.2014

Я понял это после некоторых размышлений. Правила разрешения конфликтов будут применяться только, если выбрано округление до ближайшего. Затем они помогают решить, что делать, если результат заканчивается 0.5 (может быть даже результатом с плавающей запятой, где часть .5 находится сразу после наименее значащего представленного десятичного числа).

Таким образом, если используется режим округления до ±∞ (бесконечность) или до нуля, разрыва ничьей никогда не происходит.

Только если режим ближайший, то есть дополнительный выбор алгоритмов разрыва связей, которые перечислены в статье Википедии. Стандарт IEEE позволяет округлять до ближайшего, привязывать к ближайшему четному или попеременно привязывать от нуля.

Я оставлю этот Q & A для тех, кто может найти его полезным.

person the swine    schedule 18.07.2014