Округление с плавающей точкой, битовые строки и двоичная точность

Предположим, я использую 32-битный float для хранения битовой строки (не спрашивайте). Предположим, что в дальнейшем я хотел бы сериализовать это число с плавающей точкой в ​​файл (как число с плавающей точкой), и перед сериализацией будет применено округление банкира по десятичному представлению числа с плавающей точкой. Когда я прочитал плавающее число обратно в программу, система (естественно) сохранит его в 32-битном плавающем файле, максимально приближенном к сериализованному номеру.

Насколько точным, с точки зрения цифр, должно быть мое сериализованное число с плавающей точкой после округления банкира, чтобы сериализованное число с плавающей точкой было эквивалентно двоичному числу с плавающей точкой, считываемой обратно?

1 ответ

Решение

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

В частности, пятый пункт в примечании 1 на стр. 32 стандарта IEEE 754-2008 поддерживает этот ответ, 9 цифр для одной и 17 цифр для двойной:

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

Другие вопросы по тегам