打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
float 精度
精度是指正确的有效数字,小数点后6位有错的;
exp:
float a = 3333.4444444444444;
printf("%f\n",a)
 
输出: 3333.444523
3333.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   时所看的那本……
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
2.2.2 实型常量值
学c++第二天-输出数据精度+其他
MySQL 的数据类型和建库策略
decimal(numeric )、float 和 real 数据类型的区别[转]
编程中国
Sql的decimal、float、double类型的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服