陈丹青的婚姻:float 精度
来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 13:27:52
精度是指正确的有效数字,小数点后6位有错的;exp:float a = 3333.4444444444444;printf("%f\n",a) 输出: 3333.4445233333.444 是正确的;0.444523是错误的;linux gcc 精度是 7 这个精度是指 有效数字,而不单指小数点后的位数。
至于精度是 6, 是指 最坏情况下,保持的精度至少有 6 位。
这是因为,IEEE标准的 float 类型用 23 bit 来表示浮点数的小数部分。
极限情况下(这时没有使用隐含的高位),这里所能表示的 10 进制的精度是 log10(2^23) = 6.92...
所以最小也能保持 6 位的精度。
============================
至于楼主所说的情形,是因为你的那种情况不是极限情形。
实际上,浮点数的存储形式是类似于:
数字 * 2^(幂)
的形式的。
而 123456.789098765678
表示成 1.111 0001 0010 0000 0110 0101 * 2^(16) 的-- *前的是2进制。
不信可以自己算算,将那个 2 进制转成 10 进制,然后 16次 乘 2 ,看结果是否如此。
这里小数点前的 1 是隐含的,实际存储的只有小数点后的数,就是 23 bit。
可以说,能够保留到 10 位完全是数字本身的结构,比较幸运了。
你甚至试试
float x = 0.000000000931322574615478515625; // 2^-30
然后用 printf( "%.35f\n ", x);看看,这里甚至完全保持原来的精度,
这就是数字本身的特殊结构所导致的。
再试试 999989.98 看看,精度还有没有 10位了。
==========================================
实际上,绝大部分情况(除了很接近0的数),都是使用 一位隐含的高位 的,
这时的精度是 log10(2^24) = 7.22
所以也有的书也说 float 的精度是 7 位--- 比如我刚学 C 时所看的那本……
至于精度是 6, 是指 最坏情况下,保持的精度至少有 6 位。
这是因为,IEEE标准的 float 类型用 23 bit 来表示浮点数的小数部分。
极限情况下(这时没有使用隐含的高位),这里所能表示的 10 进制的精度是 log10(2^23) = 6.92...
所以最小也能保持 6 位的精度。
============================
至于楼主所说的情形,是因为你的那种情况不是极限情形。
实际上,浮点数的存储形式是类似于:
数字 * 2^(幂)
的形式的。
而 123456.789098765678
表示成 1.111 0001 0010 0000 0110 0101 * 2^(16) 的-- *前的是2进制。
不信可以自己算算,将那个 2 进制转成 10 进制,然后 16次 乘 2 ,看结果是否如此。
这里小数点前的 1 是隐含的,实际存储的只有小数点后的数,就是 23 bit。
可以说,能够保留到 10 位完全是数字本身的结构,比较幸运了。
你甚至试试
float x = 0.000000000931322574615478515625; // 2^-30
然后用 printf( "%.35f\n ", x);看看,这里甚至完全保持原来的精度,
这就是数字本身的特殊结构所导致的。
再试试 999989.98 看看,精度还有没有 10位了。
==========================================
实际上,绝大部分情况(除了很接近0的数),都是使用 一位隐含的高位 的,
这时的精度是 log10(2^24) = 7.22
所以也有的书也说 float 的精度是 7 位--- 比如我刚学 C 时所看的那本……
float 精度
float与double的范围和精度_本为贵公子,平生实爱才1
CSS浮动属性Float详解
信息: 精度和在浮点计算精度
电能表精度等级是什么意思?
Experts: Time not ripe to float yuan
面粉的品质与精度
菜鸟理解css的float浮动属性 - 蜗爱CSS
css给span加float:right后内容下移--问题解决
overflow解决float浮动后高度自适应问题
CSS div float IE和FireFox的兼容性问题
解决IE6下float right 换行bug方案
贴片电容的种类、特点、精度
“官德尺”有刻度但缺精度
邮票齿孔度数的精度
正确选择电能表的精度等级
精度windows 7超级预读取
如何提高薄壁零件的加工精度
如何提高DSP的ADC精度
China to float 30 bln yuan in book-entry T-bo...
我国自主研发成功精度更高的石油勘探“CT”
java中BigDecimal与double的精度控制
一种提高DSP的ADC精度的方法
提高轴齿轮滚齿加工精度的方式