fre*_*low 19 c c++ string floating-point floating-accuracy
我正在编写一个打印浮点文字的程序,以便在另一个程序中使用.
我需要打印多少位才能保持原始浮点的精度?
由于浮点数具有24 * (log(2) / log(10)) = 7.2247199精度的十进制数字,我最初的想法是打印8位数就足够了.但是,如果我运气不好,那些0.2247199分布在7位有效数字的左侧和右侧,所以我应该打印9位小数.
我的分析是否正确?所有情况下都是9位十进制数字吗?喜欢printf("%.9g", x);?
是否有标准函数将float转换为具有该值所需的最小小数位数的字符串,在7或8足够的情况下,所以我不打印不必要的数字?
注意:我不能使用十六进制浮点文字,因为标准C++不支持它们.
jan*_*neb 16
为了保证二进制 - >十进制 - >二进制往返恢复原始二进制值,IEEE 754要求
The original binary value will be preserved by converting to decimal and back again using:[10]
5 decimal digits for binary16
9 decimal digits for binary32
17 decimal digits for binary64
36 decimal digits for binary128
For other binary formats the required number of decimal digits is
1 + ceiling(p*log10(2))
where p is the number of significant bits in the binary format, e.g. 24 bits for binary32.
Run Code Online (Sandbox Code Playgroud)
在C中,可用于这些转换的函数是snprintf()和strtof/strtod/strtold().
当然,在某些情况下甚至更多的数字可能是有用的(不,它们并不总是"噪声",这取决于十进制转换例程的实现,例如snprintf()).考虑例如打印二元分数.
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |