我需要以人类可读的文本形式表示 IEEE 754-1985 双(64 位)浮点数,条件是文本形式可以解析回exactly相同的(按位)数字。
如果不打印原始字节,这是否可能/实用?
如果是,那么执行此操作的代码将不胜感激。
最佳选择:使用 C99 十六进制浮点格式:
printf("%a", someDouble);
以这种方式生成的字符串可以转换回double
与C99strtod( )
功能,并且还与scanf( )
功能。其他几种语言也支持这种格式。一些例子:
decimal number %a format meaning
--------------------------------------------
2.0 0x1.0p1 1.0 * 2^1
0.75 0x1.8p-1 1.5 * 2^-1
十六进制格式的优点是所有表示形式都是exact。因此,即使有人更改了执行转换的舍入模式,将字符串转换回浮点数也始终会给出原始数字。对于不精确的格式来说,情况并非如此。
如果您出于某种原因不想使用十六进制格式,并且愿意假设舍入模式将始终舍入到最接近的值(默认),那么您可以将数据格式化为至少为 17 的小数有效数字。如果您有一个正确的舍入转换例程(大多数(不是所有)平台都有),这将保证您可以进行从双精度到字符串的往返转换,而不会损失任何准确性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)