Диапазоны десятичного преобразования в спецификации IEEE 754 (двоичная арифметика с плавающей точкой) - PullRequest
1 голос
/ 18 августа 2010

В таблице 2 в разделе 5.6 внизу страницы 11 спецификации IEEE 754 перечислены диапазоны десятичных значений, для которых необходимо выполнить преобразование десятичных чисел в двоичные с плавающей запятой. Диапазон показателей не имеет смысла для меня. Например, для двойной точности в таблице указано, что максимальное десятичное значение, которое может быть преобразовано, равно (10 17 -1) * 10 999 . Это намного больше, чем DBL_MAX, что составляет примерно 1,8 * 10 308 . Очевидно, я что-то упустил - кто-то может объяснить мне эту таблицу? Спасибо.

1 Ответ

2 голосов
/ 18 августа 2010

[Примечание: технически документ, на который вы ссылаетесь, больше не является стандартом;«IEEE 754» действительно должен использоваться только для обозначения обновленного издания стандарта, опубликованного в 2008 году.]

Насколько я понимаю, как вы говорите, левый столбец этой таблицы описывает диапазондопустимые входные данные для любой предоставленной десятичной строки в двоичное преобразование с плавающей запятой.Так, например, десятичная строка, похожая на '1.234e+879', представляет значение 1234 * 10 ^ 876 (M = 1234, N = 876), поэтому находится в пределах таблицы и должна быть принята функцией преобразования.Однако обратите внимание, что именно то, какую форму могут принимать десятичные строки, выходит за рамки IEEE 754;здесь уместно только значение.

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

Чуть более тонко, из моего прочтения этого документа, десятичная строка типа '1e + 1000' также должна бытьпринимается функцией преобразования, так как значение, которое она представляет, выражается в форме 10 * 10 ^ 999 или даже 10000000000000000 * 10 ^ 984.См. Предложение, которое начинается с «На входе, конечные нули должны добавляться или удаляться из M ...» в разделе 5.6.

Текущая версия IEEE 754, кажется, немного отличается в этом отношении, судя пов общедоступной черновой версии ( версия 1.2.5 ): просто требуется, чтобы каждая реализация указывала границы [-η, η] для показателя степени десятичной строки, причем η достаточно велико для размещения десятичных строксоответствует конечным двоичным значениям в наибольшем поддерживаемом двоичном формате;поэтому, если формат binary64 является самым большим поддерживаемым форматом, мне кажется, что η = 400 будет достаточно большим, например.

...