【发布时间】:2012-06-09 08:22:27
【问题描述】:
我正在编写一个程序,它打印浮点文字以在另一个程序中使用。
为了保持原始浮点数的精度,我需要打印多少位?
由于浮点数具有 24 * (log(2) / log(10)) = 7.2247199 十进制数字精度,我最初的想法是打印 8 位数字就足够了。但如果我不走运,那些0.2247199 会分布在 7 个有效数字的左侧和右侧,所以我应该打印 9 个十进制数字。
我的分析正确吗?对于所有情况,9 个十进制数字是否足够?喜欢printf("%.9g", x);?
在 7 或 8 就足够的情况下,是否有一个标准函数可以将浮点数转换为具有该值所需的最小小数位数的字符串,所以我不打印不必要的数字?
注意:我不能使用十六进制浮点文字,因为标准 C++ 不支持它们。
【问题讨论】:
-
使用 1000 位数字并剪掉尾随的零! ;)
-
因为您无法将基于二进制的浮点数转换为十进制小数而不会出错,所以我建议只转储二进制表示(或单独的尾数 + 指数)。
-
@Vlad 你不能吗?不是所有的二进制分数都可以表示为有限小数吗?
-
@Fred:不会,但至少这个表示是准确的,所以你可以在另一个程序中选择它并从中生成完全相同的浮点值。
-
@FredOverflow:你能澄清一下这里的目标吗?是要获得浮点数的精确十进制表示吗? (如果是这样,R.Martinho 就在正确的轨道上。)还是打印到足够的精度,以便可以明确地将其解析回原始浮点值?
标签: c++ c string floating-point floating-accuracy