社区
C语言
帖子详情
浮点数是如何储存的?
「已注销」
2012-02-12 09:29:42
为什么实用浮点数的时候有时候会丢失精度?希望各位会的大神们能够详细解答一下。
...全文
514
16
打赏
收藏
浮点数是如何储存的?
为什么实用浮点数的时候有时候会丢失精度?希望各位会的大神们能够详细解答一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
「已注销」
2012-02-20
打赏
举报
回复
32位采用的是IEEE754
「已注销」
2012-02-20
打赏
举报
回复
明白了~~
今天老师讲了
赵4老师
2012-02-17
打赏
举报
回复
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
「已注销」
2012-02-16
打赏
举报
回复
[Quote=引用 10 楼 c090869 的回复:]
引用 5 楼 fengzshizhe 的回复:
引用 4 楼 arnold9009 的回复:
0.1 = 0.0 0011 0011 0011 0011 0011 0011 .....(无限循环)
那为什么0.1的表示形式是这样的呢?
因为 0.1=1.0/16 1.0/32 1.0/(32*16) 1.0/(32*32)........
[/Quote]分母是什么意思…?怎么来的…
「已注销」
2012-02-16
打赏
举报
回复
[Quote=引用 10 楼 c090869 的回复:]
引用 5 楼 fengzshizhe 的回复:
引用 4 楼 arnold9009 的回复:
0.1 = 0.0 0011 0011 0011 0011 0011 0011 .....(无限循环)
那为什么0.1的表示形式是这样的呢?
因为 0.1=1.0/16+1.0/32+1.0/(32*16)+1.0/(32*32)........
[/Quote]分母是什么意思…?怎么来的…
goodwithcode
2012-02-12
打赏
举报
回复
二进制、?
duyufeng1995
2012-02-12
打赏
举报
回复
fu点型变量在计算机内存中占用4字节(Byte),即32-bit
seucs
2012-02-12
打赏
举报
回复
等你学过数据在计算机中的存储方式后就自然明朗了,知识需要一点一滴的积累的
「已注销」
2012-02-12
打赏
举报
回复
[Quote=引用 4 楼 arnold9009 的回复:]
0.1 = 0.0 0011 0011 0011 0011 0011 0011 .....(无限循环)
[/Quote]
那为什么0.1的表示形式是这样的呢?
Arnold9009
2012-02-12
打赏
举报
回复
lz看一下IEEE754浮点数标准吧
IEEE规定的浮点数的机器表示:
32位机器的 float 是4字节的,共32位。
第1位是符号位,接着8位指数位,接着23位基数位。
以5.1为例。
5 = 101 (2进制)
0.1 = 0.0 0011 0011 0011 0011 0011 0011 .....(无限循环)
所以 5.1 = 101.0 0011 0011 0011 0011 0011 0011 0011 0011 ...
5.1= 1.010 0011 0011 0011 0011 0011 0011 0011 0011 0011... * 2^2
因为第一位总是为1,如果是0,就移动小数点直到是非0的,所以第一位的1丢弃。
得到 010 0011 0011 0011 0011 0011 0011 0011 0011....
取23位 得到 0100 0110 0110 0110 0110 011
接着看指数部分
指数是2, 根据规定,指数统一+127再转换为无符号8位2进制数,
2+127=129 (1000 0001)
存储的时候指数部分存储在基数之前,这样就有31位了,
因为5.1是正的,所以符号为是0,存储在指数部分之前
这样就得到 0100 0000 1010 0011 0011 0011 0011 0011
caddor
2012-02-12
打赏
举报
回复
fpu,浮点数运算,在汇编中有介绍,蛮复杂的,
汇编一般先将整形,后将 浮点数
「已注销」
2012-02-12
打赏
举报
回复
那什么事浮点寄存器,浮点寄存器是怎样操纵的?
[Quote=引用 1 楼 ghj123h 的回复:]
引用 《C程序设计》
浮点数在浮点寄存器中,以指数型是存在,前面是小数,后面是指数。
由于浮点寄存器大小有限,所以会丢失精度
++
[/Quote]
正在无聊中
2012-02-12
打赏
举报
回复
[Quote=引用 《C程序设计》]
浮点数在浮点寄存器中,以指数型是存在,前面是小数,后面是指数。
由于浮点寄存器大小有限,所以会丢失精度
[/Quote]
++
如此美丽的你
2012-02-12
打赏
举报
回复
看<<深入理解计算机系统>>
c090869
2012-02-12
打赏
举报
回复
[Quote=引用 5 楼 fengzshizhe 的回复:]
引用 4 楼 arnold9009 的回复:
0.1 = 0.0 0011 0011 0011 0011 0011 0011 .....(无限循环)
那为什么0.1的表示形式是这样的呢?
[/Quote]
因为 0.1=1.0/16+1.0/32+1.0/(32*16)+1.0/(32*32)........
bluewanderer
2012-02-12
打赏
举报
回复
float类型
最高位是符号位,后面8位是指数,最后23位是2进制有效数字的小数部分,一共32位。
符号位0表示正数,1表示负数。指数表示有效数字要乘以2的多少次方,127表示0次方,126表示-1次方,128表示1次方,0是无穷小,255是无穷大。有效数字整数部分永远是1,所以省略,加上23位小数部分一共24位有效数字。
double类型,差不多区别是指数一共11位,有效数字小数部分52位,一共64位。
浮点数
在内存中的
储存
我们在很多时候,创建一个整型变量存储一个数字的时候,使用%d的方法可以正常输出出来,但是当我们以%f等的类型打印时就会发现输出的值,并不是我们存储的值,今天我们就围绕着这个问题来进行探讨。常⻅的
浮点数
:3.14159、1E10等,
浮点数
家族包括: float、double、long double 类型。
浮点数
表⽰的范围: float.h 中定义。
C语言:
浮点数
在内存中的
储存
这里给一段代码: 假设
浮点数
和整数在内存中
储存
方式相同: 由此得出:整数的
储存
和
浮点数
在内存中的
储存
方式不一样。 上面这个代码,n1和*pfloat1,n2和pfloat2里面都是
储存
的是同一个数,为什么打印出来的结果大不一样。要理解这个结=结果,我们要知道
浮点数
在内存中的
储存
方式。根据国际标准IEEE(电气电子工程师学会)754,任意一个二进制
浮点数
V可以表示成以下形式:对于M和E的特别规定: 一个整数n=9,其在内存中
储存
方式是:一个
浮点数
9.0,在内存中
储存
方式为:(-1)^0 * 1.001
浮点数
的
储存
储存
,在平时写代码时并不会过多注意的一个点。知道这篇文章,实际上就是在修炼自己的内功。
整数和
浮点数
在内存中的
储存
本章内容主要是关于整数和
浮点数
在内存中的
储存
。在来了解这些之前,我们需要知道数据在内存中
储存
都是以二进制来
储存
的,无论是整数还是小数,都是以二进制的方式
储存
,只是
储存
方式有所不同。我们已经习惯了使用二进制来表达我们生活或学习中的数字,但是对于计算机来说,以二进制数则更容易了解。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章