我遇到了两种不同的浮点数精度公式.
⌊(N-1)log 10(2)⌋= 6位小数(单精度)
和
N log 10(2)≈7.225十进制数字(单精度)
其中N = 24个有效位(单精度)
第一个公式位于由W. Kahan教授撰写的" IEEE标准754二进制浮点运算 " 第4页的顶部.
第二个公式可以在维基百科文章" 单精度浮点格式 "的IEEE 754单精度二进制浮点格式:binary32下找到.
对于第一个公式,W.Kahan教授说
如果十进制字符串最多为6 sig.(分解). 转换为Single,然后转换回相同数量的sig.dec.,那么最后的字符串应该与原始字符串匹配.
对于第二个公式,维基百科说
...总精度为24位(相当于log 10(2 24)≈7.225十进制数字).
两个公式(6和7.225十进制数字)的结果是不同的,我希望它们是相同的,因为我假设它们都是为了表示最有效的十进制数字,可以转换为浮点二进制,然后转换回来十进制,其开头的有效十进制数字相同.
为什么这两个数字不同,什么是最重要的十进制数字精度可以转换为二进制并返回到十进制而不会失去重要性?
floating-point binary decimal significant-digits floating-point-precision
相当于log10(2 ^ 24)≈7.225十进制数字
精度:7位数
6
std::numeric_limits<float>::digits10
Run Code Online (Sandbox Code Playgroud)
为什么numeric_limits在这里返回6?维基百科和MSDN都报告浮点数具有7个十进制数字的精度.
我对什么max_digits10代表感到困惑.根据其文档,对于所有整数类型,它为0.浮点类型的公式max_digits10看起来类似于int's digits10'.
我有这个简单的代码行:
float val = 123456.123456;
Run Code Online (Sandbox Code Playgroud)
当我打印此val或查看范围时,它存储值123456.13
好吧,没关系,它不能在4个字节之后存储所有那些数字,但为什么它在点之后产生13?不应该是12吗?
(在win32上使用vc ++ 2010 express)
http://en.wikipedia.org/wiki/Double-precision_floating-point_format说double可以处理数字右边的16位精度,是digits10表示这个数字吗?