关于float能否表示数 的问题

堂积Code 2016-09-16 05:58:08
怎么判断一个数是否可以用float完整的表示呢,比如说有些数2.23,用float表示就是2.29999(仅仅举例)
怎么判断这个数是否可以用float完整表示而不是用接近的数表示呢
...全文
758 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-08
  • 打赏
  • 举报
回复
比如用十进制无法精确表示1/3,但用三进制0.1就可以。
Sanlence 2016-10-08
  • 打赏
  • 举报
回复
引用 23 楼 zhao4zhong1 的回复:
[quote=引用 22 楼 Sanlence 的回复:] [quote=引用 21 楼 zhao4zhong1 的回复:] [quote=引用 20 楼 Sanlence 的回复:] 1楼正解,关于这个问题,建议你看书《深入理解计算机系统》第二章,里面有详细的解释。float只是近似值。
十进制数也是近似值好不啦。[/quote] 你说的十进制是指int还是float啊?int全都是精确的,float才有精度这一说。[/quote] 我说的十进制跟电脑无关。[/quote] 十进制只跟字长有关,字长只是表示数的范围有关,跟精度无关。在数学上,从没听说十进制有精度一说
  • 打赏
  • 举报
回复
既然任意进制之间可以互相转换,那么一种进制有精度问题必然其他进制也有精度问题,比如单精度浮点数小数点后23位尾数(二进制),十进制精度就是小数点后6~7位。
赵4老师 2016-09-27
  • 打赏
  • 举报
回复
引用 22 楼 Sanlence 的回复:
[quote=引用 21 楼 zhao4zhong1 的回复:] [quote=引用 20 楼 Sanlence 的回复:] 1楼正解,关于这个问题,建议你看书《深入理解计算机系统》第二章,里面有详细的解释。float只是近似值。
十进制数也是近似值好不啦。[/quote] 你说的十进制是指int还是float啊?int全都是精确的,float才有精度这一说。[/quote] 我说的十进制跟电脑无关。
Sanlence 2016-09-26
  • 打赏
  • 举报
回复
引用 21 楼 zhao4zhong1 的回复:
[quote=引用 20 楼 Sanlence 的回复:] 1楼正解,关于这个问题,建议你看书《深入理解计算机系统》第二章,里面有详细的解释。float只是近似值。
十进制数也是近似值好不啦。[/quote] 你说的十进制是指int还是float啊?int全都是精确的,float才有精度这一说。
赵4老师 2016-09-20
  • 打赏
  • 举报
回复
引用 20 楼 Sanlence 的回复:
1楼正解,关于这个问题,建议你看书《深入理解计算机系统》第二章,里面有详细的解释。float只是近似值。
十进制数也是近似值好不啦。
Sanlence 2016-09-20
  • 打赏
  • 举报
回复
1楼正解,关于这个问题,建议你看书《深入理解计算机系统》第二章,里面有详细的解释。float只是近似值。
赵4老师 2016-09-20
  • 打赏
  • 举报
回复
关于十进制数能否表示所有数的问题……
lm_whales 2016-09-19
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
[quote=引用 6 楼 lm_whales 的回复:] 请问什么叫“数据在2^-127~2^(127+23) 只能表示23个数,也就是23 个位 只有一个位为1 的23个数。”?
尾数23位中,二进制值为 100000000.。。。。 010000000。。。。 001000000。。。。 这一系列浮点数(隐藏位为0,指数 是-127 )。是除了0之外,绝对值最小的浮点数23个浮点数了,称为非规格化浮点数 哦,加上正负号,共有46 个
  • 打赏
  • 举报
回复
引用 6 楼 lm_whales 的回复:
凡是可以表示成± (Σa[i]*2^i+Σa[j]*2^-j) 其中,a[i[,a[j] 为0或者1 并且 max(i)+max(j) <126的, i,j<=126的,大约都没问题 数据在2^-127~2^(127+23) 只能表示23个数,也就是23 个位 只有一个位为1 的23个数。 最大数,大概是2^128-1 大约是这样,没太仔细计算 实际上会不会这样,要去验证,可能未必都是这样的
请问什么叫“数据在2^-127~2^(127+23) 只能表示23个数,也就是23 个位 只有一个位为1 的23个数。”?
小灸舞 版主 2016-09-19
  • 打赏
  • 举报
回复
根据IEEE 754标准,浮点数在计算机内部存储时主要分为符号位(sign)、指数(exponent)部分、尾数(fraction)部分 http://blog.csdn.net/lzyzk/article/details/49949061
AlbertS 2016-09-19
  • 打赏
  • 举报
回复
计算机能精确表示的小数只有那么几个
  • 打赏
  • 举报
回复
引用 14 楼 lm_whales 的回复:
我只是说个大概,怎么就乱说了 这是IEEE浮点数的规范 我只是没有搬原文而已
难道IEEE浮点数的规范 非规格化数只有46个?
  • 打赏
  • 举报
回复
引用 14 楼 lm_whales 的回复:
我只是说个大概,怎么就乱说了 这是IEEE浮点数的规范 我只是没有搬原文而已
说错了就是错了,不是大概,你对于非规格化数的解释完全是错的
赵4老师 2016-09-19
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
浮点数格式 http://bbs.csdn.net/topics/390676437
理解讨论之前请先学会如何观察
lm_whales 2016-09-19
  • 打赏
  • 举报
回复
我只是说个大概,怎么就乱说了 这是IEEE浮点数的规范 我只是没有搬原文而已
  • 打赏
  • 举报
回复
#11还在乱说,我建议您吧,最好自己先搞清楚再出来说,否则既误导别人,还加深了错误认知,浪费自己的时间,害人害己。
  • 打赏
  • 举报
回复
引用 10 楼 lm_whales 的回复:
[quote=引用 9 楼 DelphiGuy 的回复:] [quote=引用 6 楼 lm_whales 的回复:] 请问什么叫“数据在2^-127~2^(127+23) 只能表示23个数,也就是23 个位 只有一个位为1 的23个数。”?
尾数23位中,二进制值为 100000000.。。。。 010000000。。。。 001000000。。。。 这一系列浮点数(隐藏位为0,指数 是-127 )。是除了0之外,绝对值最小的浮点数23个浮点数了,称为非规格化浮点数 哦,加上正负号,共有46 个 [/quote] 您能不能先把语文学好。难道您认为: “数据在2^-127~2^(127+23) 只能表示23个数,也就是23 个位 只有一个位为1 的23个数。” 和您上面解释的能是一个意思? 而且您上面的解释也不知所云,非规格化浮点数是指数为0(+-0),尾数不全为0的数(并非尾数中只有1位为1),对于单精度非规格化浮点,指数也不代表-127,而是-126,所以表达范围是+- 2^-126 * 0.nnnnn... 怎么可能只有23/46个呢?
lm_whales 2016-09-19
  • 打赏
  • 举报
回复
浮点数 float 类型,有几个特例 0 有+0,-0 尾数指数全0 ,符号位 分别为0,1 有+inf正无穷,-inf负无穷, 尾数为0 ,符号 分别为0,1指数部分全1 nan 不是一个数 (指数全1的其他编码) 等特殊编码 抛开符号位 还有23个编码的尾数,每个数只有一个位为1,指数值 固定为-127 , ------这里指的是指数编码部分表示的值为2^-127。不是指数的编码---------- 算上符号位 ,每种编码正负 各一对,是46 个 非规格化浮点数,他们的隐藏位固定为0。 除了。以上特殊编码。和非规格化浮点数外 其余都是规格化浮点数. 隐藏位为1 尾数为0~111 。。。 (23个位)。 尾数部分,可表示数为 1~(2^24-1)*2^-23 除了隐藏位固定为1外,23个尾数位,从0~全1 可表示 2^24-1 个数,范围是1~(2 - 2^-23) 算上指数部分,和符号位,就是所有可表示的规格化浮点数
  • 打赏
  • 举报
回复
lz研究下 二进制 十进制相互转换 就明白了
加载更多回复(6)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧