首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用二进制表示浮点数。IEEE

如何用二进制表示浮点数。IEEE
EN

Stack Overflow用户
提问于 2012-12-02 03:42:00
回答 2查看 17.9K关注 0票数 3

与十进制类似,二进制数也可以表示浮点数。现在我读到它可以有这种类型的浮点

0.50.10.250.010.1250.001 ...诸若此类。但是,例如,0.1(十进制)是如何用二进制表示的呢?

此外,给定一个十进制浮点数,如何将其转换为十进制等效值(假设它不是那么简单)。

编辑:所以我理解更好的问题应该是:如何将十进制浮点数转换为二进制?现在我明白了,我们把小数部分相乘,直到它变成零。现在很有可能两个浮点可以有相同的表示,对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 03:47:19

给定多少位?

0.1亿:

代码语言:javascript
复制
0.00011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011...

如你所见,这是一个近似值。

代码语言:javascript
复制
Binary                                          Decimal
0.1     == 1/2^1         == 1/2              == 0.5
0.01    == 1/2^2         == 1/4              == 0.25
0.11    == 1/2^1 + 1/2^2 == 1/2 + 1/4 == 3/4 == 0.75

radix point之后的每一位代表1/2^(position_after_bit_string)。

代码语言:javascript
复制
postion:   |1|2|3|4|5|6|7|
         0.|0|0|0|0|0|0|1|

所以0.0000001 = 1/2^7 = 0.0078125

伪码:

代码语言:javascript
复制
decimal_value = 0 
for i, bit in enumerate(binary_string):
    if bit == 1
         decimal_value += 1/2**i

有关更多信息,请访问Why can't decimal numbers be represented exactly in binary?

票数 6
EN

Stack Overflow用户

发布于 2012-12-23 03:44:14

另一个可能有帮助的观察结果。浮点数的“整数部分”以其“正常”形式存在于二进制中,例如,如果值为25.7482,则浮点数中的位“11001”(25),后面的位表示小数(实际上第一个“1”从不存储,它隐含在格式中)。如果你从这个数字中减去25.0,再乘以10,得到7.482,通过检查这个值的整数部分,你可以得到第一个小数位'7‘。

减去7.0,乘以10得到4.82,因此下一个数字是'4',依此类推。从理论上讲,这个过程最终将以零结果结束,因为所有可以用浮点格式精确表示的值都具有精确的小数表示;然而,由于原始浮点的精度,“精确”结果的位数可能远远超过实际合理的位数(而且您可能需要内部额外的精度才能获得完全精确的结果--您需要确保乘以10不会产生舍入误差)。

而且,对于像6.432e-200这样的数字,这种方法是可行的,但效率不是很高(在第一个'6‘出现之前,你会生成199个零)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13663026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档