社区
C语言
帖子详情
浮点数是如何储存的?
「已注销」
2012-02-12 09:29:42
为什么实用浮点数的时候有时候会丢失精度?希望各位会的大神们能够详细解答一下。
...全文
457
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位。
关于C语言
浮点数
的存储
主要是介绍
浮点数
在C语言中的比较存储方式,这个可以探讨一下,与存储整型不同
关于
浮点数
的精度问题
关于
浮点数
的精度问题,对于了解和学习C语言有一定帮助
TMS320C3x
浮点数
简介、IEEE754的32位转VC33的32位
浮点数
算法、IEEE754的64位
浮点数
转VC33的40位
浮点数
算法
本文档简介了TMS320C3x
浮点数
简介、IEEE754的32位转VC33的32位
浮点数
算法、IEEE754的64位
浮点数
转VC33的40位
浮点数
算法;给相关TI的DSP开发工程师提供开发参考。
浮点数
转换工具(十六进制转
浮点数
)
非常适用的小工具,绿色软件,不用安装,
浮点数
转换工具(十六进制转
浮点数
)
双精度
浮点数
转换
双精度
浮点数
、单精度
浮点数
与十六进制,二进制之间可以进行任意转换
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章