对于精度要求较高的开发场景,C中的浮点数精度问题需要特别注意。对于有很多经验的开发者而言,可能只知道C语言的float精度在6-7位之间,为什么是7?为什么又是6-7?网上的文章大部分一大抄,而且很多也不准确。本人今天翻出了计算机组成原理考研指导,重新看了一遍IEEE754标准,现将此疑问整理如下:

在C语言中,浮点数的存储遵循IEEE754标准。float和double如下:

IEEE754
格式 位数(bit) 数符(bit)S 阶码(bit)E 尾数(bit)M 备注
float 32 1 8 23 阶码范围:1~254
double 64 1 11 52 阶码范围:1-2046

以float为例,一个32位的float按照上表的格式,实际表示的数字为:

阶码使用的是一种叫做移码的东西,和补码类似,就是数值整体偏移固定长度(float中偏移量offset=127)。所以阶码范围1~254实际表示的是-126~127。阶码全为1表示无穷大,全为0表示非规格化数。

尾数部分采用1.M的格式,小数点前固定有一个1,这样表示的范围又大了一点。

至于精度问题,当1.11111111111111111111111作为尾数时,精度最高。此时共计24个1,即2^23=8388608共7位。所以C语言的float精度为7的结论得出来了。至于为什么6~7,是因为十进制和二进制相互转化的时候,不是所有数都能对得上,会有些情况存在误差。比如计算机无法准确表示0.51,只能表示为0.5099999...。所以准确能保证的是6位。

C语言中float精度问题探究相关推荐

  1. C语言程序中的精度问题,c语言中float精度问题

    3.1415926(10进制) == 11.00100100001111110110100110100010010110110000100101(2进制) == 1.10010010000111111 ...

  2. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  3. c语言中不正确的浮点型常量,c语言中float a=1;对吗?,c语言的问题。float a=1,*b=a,*c=...

    导航:网站首页 > c语言中float a=1:对吗?,c语言的问题.float a=1,*b=&a,*c= c语言中float a=1:对吗?-,c语言的问题.float a=1,*b ...

  4. c语言float怎么表示,c语言中float是如何表示的

    <c语言中float是如何表示的>由会员分享,可在线阅读,更多相关<c语言中float是如何表示的(6页珍藏版)>请在技术文库上搜索. 1.c语言中 FLOAT 是如何表示的 ...

  5. c语言 float 取反,c语言中FLOAT是如何表示.doc

    c语言中FLOAT 是如何表示的 HYPERLINK "/blog/static/1264962942009933219393/" 默认分类 ??2009-10-03 15:21 ...

  6. c语言用int取整取了小数_[c语言取整算法]C语言中float型数据怎么取整数部分算法或取小数部分...

    C语言中float型数据怎么 取整数部分算法 或取小数部分 float福n=12.223; int x=(int)n; float y=n-(float)x; C语言有哪些取整函数? C语言有以下几种 ...

  7. c语言指数部分尾数部分,C语言中 float double在内存中的存储

    C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用 64bit,我们在声明一个变量float f= 2.2 ...

  8. java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...

    float和double类型的数据在编程时的需要注意的地方 package execisetest; public class AccuranceTest {     public static vo ...

  9. C语言中float,double类型,在内存中的结构(存储方式).

    从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...

最新文章

  1. Java图片,视频上传,截取视频帧以及文件下载和视频IO获取
  2. 黄聪:使用Wordpress中的wpdb类操作数据库
  3. LeetCode 344 反转字符串
  4. anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾
  5. 15 张前端高清知识地图,强烈建议收藏
  6. 企业在推行流程管理过程中可能出现以下四个问题
  7. .Net发布到服务器出现必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=的问题
  8. Kotlin 文档入门-函数 集合
  9. Windows给SVN配置中文语言包
  10. dubbo面试题-dubbo源码解析
  11. 崔荣容,英语如法入门1-50讲
  12. c语言如何编辑一个长方形,C语言对象编程第一弹封装与抽象(建立长方形对象)...
  13. ONF和ON.Lab合并为一 加速推进SDN落地
  14. git中patch的用法
  15. java-12:spring MVC - 控制反转IOC,依赖注入DI
  16. Excel基础24讲
  17. 百度技术牛人谈大学生择业要诀:首选龙头企业
  18. 2022年前端免费学习资料大全
  19. python高斯求和
  20. 用手机直接播放电脑本地的视频文件

热门文章

  1. VUE 图片上加文字水印
  2. BRCM5.02编译六:No package 'zlib' found
  3. Android之rild进程启动源码分析
  4. [策略模式]在游戏开发中的应用
  5. oracle pls 00905,exp报错 ORA-06550 PLS-00905(未解决)
  6. Java 设计模式 Iterator 迭代 模式
  7. 第十一届蓝桥杯JavaB组省赛(题目及AC题解)
  8. 在微型计算机中内存是按什么编制,微机内存按什么编址
  9. 几个很“高雅”的测试
  10. react项目开发中出现浏览器翻译功能造成的bug