Форматирование чисел с плавающей запятой IEEE 754 одинарной точности - PullRequest
2 голосов
/ 02 октября 2010

Мне нужно представлять числа одинарной точности в виде текста таким образом, чтобы не потерять какую-либо информацию (поэтому я могу получить одно и то же число, возможно, без учета NaN и т. Д.), Но без слишком большого количества ложных цифр - так, с одинарной точностью 0,1«0.1», а не «0.100000001490116».

Я не пытаюсь сохранить байты, эти лишние цифры просто сбивают с толку.

Есть ли простой способ сделать это?Я вижу, что по крайней мере 8 значащих десятичных разрядов понадобятся для представления 23 + 1 битов (12345678.0 и 12345679.0 различаются с одинарной точностью), и этого будет достаточно с двоичным показателем (12345b-11 вид записи), но это гарантированоДостаточно ли десятичной записи экспоненты (1.2345e+6) или записи, которая использует 0-отступ (0.0000123456 - обычно более удобочитаемы, и эти нули меня не беспокоят)?

Любые форматы printf,или точные инструкции очень ценятся.

1 Ответ

3 голосов
/ 02 октября 2010

Выполнение этого права является весьма нетривиальной задачей: проблема является предметом многочисленных научных работ.

Многие проекты с открытым исходным кодом используют библиотеку dtoa.c Дэвида М. Гея дляэтот.Если вы используете Python, недавно было выпущено округление на основе dtoa.c (2.7 / 3), и обсуждение соответствующей задачи очень полезно:

Если вы хотите узнать больше (лоты):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...