社区
C语言
帖子详情
浮点数是如何储存的?
「已注销」
2012-02-12 09:29:42
为什么实用浮点数的时候有时候会丢失精度?希望各位会的大神们能够详细解答一下。
...全文
337
16
打赏
收藏
浮点数是如何储存的?
为什么实用浮点数的时候有时候会丢失精度?希望各位会的大神们能够详细解答一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
proghua
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位。
浮点数
的数据结构.pdf
浮点数
的数据结构
浮点数
的数据结构 周末在家,重新学习了⼀下以前不太懂的知识点。
浮点数
和数据结构。 1 什么是
浮点数
? 通俗来说带有⼩数点的数都是
浮点数
。⽐如1.1,121.212,-1.11,-222.111 2 在JAVA中常⽤表⽰
浮点数
的类型是什么?区别是什么? 在JAVA中,通常使⽤的
浮点数
的类型为 FLoat和Double,他们的区别在于⼤⼩与
储存
⽅式不同 public class App { public static void main(String[] args) { System.out.println("Float:"+Float.SIZE); System.out.println("Double:"+Double.SIZE); } } Float:32 Double:64 从这⾥可以看出FLoat是32位的,Double是64位 Float的
储存
结构 0 00000000 00000000000000000000000 符号位1 阶数位8 ⼩数位23(8388607(7位⼗进制)<9999999(7位⼗进制))所以他的精度是保证6但不到7 Double的
储存
结构
关于C语言
浮点数
的存储
主要是介绍
浮点数
在C语言中的比较存储方式,这个可以探讨一下,与存储整型不同
精品课件资料
浮点数
的存储结构.ppt
2021年09月16日
C程序中用union实现
浮点数
与IEEE格式转换
1. 问题的提出 笔者在系统开发中采用RS485实现单片机与外围设备的通信,通信采用通用串行接口协议(USS),按照串行总线的主从通讯原理来确定访问的方法。USS规定了一套严格的通信规则,关于
浮点数
参数值,USS规定采用IEEE-754格式进行传送。例如,
浮点数
50.0,在通信中传送的是它的IEEE-754格式,即4字节的十六进制424800H.因此,单片机的C程序,在发送或接收外围设各的参数值时,需要解决如何实现
浮点数
与IEEE格式转换的问题。 2.IEEE
浮点数
的格式 在计算机中,
浮点数
的存储均采用4字节的IEEE-754格式。例如,
浮点数
50.0的IEEE表示形式如下:二进制: 其中,最高位表示符号,"1"表示负,"0"表示正;第23~30位表示阶码。注意:阶码是以2为底的指数再加上偏移量127.第0~22位是尾数部分。尾数的整数部分永远为1,因此不予保存,但它是隐含存在的。一个
浮点数
计算式为: 例如,前面绘出的
浮点数
的表示形式中,s=0,n=132,m=(1/2+0/4+0/8+1/16+0/32+……),则计算结果为50.0. 3.
浮点数
与IEEE格式转换
浮点数
在计算机内存中的存储格式
浮点数
在计算机内存中的存储格式
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章