C语言中float精度问题探究
对于精度要求较高的开发场景,C中的浮点数精度问题需要特别注意。对于有很多经验的开发者而言,可能只知道C语言的float精度在6-7位之间,为什么是7?为什么又是6-7?网上的文章大部分一大抄,而且很多也不准确。本人今天翻出了计算机组成原理考研指导,重新看了一遍IEEE754标准,现将此疑问整理如下:
在C语言中,浮点数的存储遵循IEEE754标准。float和double如下:
格式 | 位数(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精度问题探究相关推荐
- C语言程序中的精度问题,c语言中float精度问题
3.1415926(10进制) == 11.00100100001111110110100110100010010110110000100101(2进制) == 1.10010010000111111 ...
- 转载——C语言中float,double类型,在内存中的结构(存储方式)
最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...
- 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 ...
- c语言float怎么表示,c语言中float是如何表示的
<c语言中float是如何表示的>由会员分享,可在线阅读,更多相关<c语言中float是如何表示的(6页珍藏版)>请在技术文库上搜索. 1.c语言中 FLOAT 是如何表示的 ...
- c语言 float 取反,c语言中FLOAT是如何表示.doc
c语言中FLOAT 是如何表示的 HYPERLINK "/blog/static/1264962942009933219393/" 默认分类 ??2009-10-03 15:21 ...
- c语言用int取整取了小数_[c语言取整算法]C语言中float型数据怎么取整数部分算法或取小数部分...
C语言中float型数据怎么 取整数部分算法 或取小数部分 float福n=12.223; int x=(int)n; float y=n-(float)x; C语言有哪些取整函数? C语言有以下几种 ...
- c语言指数部分尾数部分,C语言中 float double在内存中的存储
C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用 64bit,我们在声明一个变量float f= 2.2 ...
- java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...
float和double类型的数据在编程时的需要注意的地方 package execisetest; public class AccuranceTest { public static vo ...
- C语言中float,double类型,在内存中的结构(存储方式).
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...
最新文章
- Java图片,视频上传,截取视频帧以及文件下载和视频IO获取
- 黄聪:使用Wordpress中的wpdb类操作数据库
- LeetCode 344 反转字符串
- anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾
- 15 张前端高清知识地图,强烈建议收藏
- 企业在推行流程管理过程中可能出现以下四个问题
- .Net发布到服务器出现必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=的问题
- Kotlin 文档入门-函数 集合
- Windows给SVN配置中文语言包
- dubbo面试题-dubbo源码解析
- 崔荣容,英语如法入门1-50讲
- c语言如何编辑一个长方形,C语言对象编程第一弹封装与抽象(建立长方形对象)...
- ONF和ON.Lab合并为一 加速推进SDN落地
- git中patch的用法
- java-12:spring MVC - 控制反转IOC,依赖注入DI
- Excel基础24讲
- 百度技术牛人谈大学生择业要诀:首选龙头企业
- 2022年前端免费学习资料大全
- python高斯求和
- 用手机直接播放电脑本地的视频文件
热门文章
- VUE 图片上加文字水印
- BRCM5.02编译六:No package 'zlib' found
- Android之rild进程启动源码分析
- [策略模式]在游戏开发中的应用
- oracle pls 00905,exp报错 ORA-06550 PLS-00905(未解决)
- Java 设计模式 Iterator 迭代 模式
- 第十一届蓝桥杯JavaB组省赛(题目及AC题解)
- 在微型计算机中内存是按什么编制,微机内存按什么编址
- 几个很“高雅”的测试
- react项目开发中出现浏览器翻译功能造成的bug