一个浮点型有32个二进制数,而一个双精度型有64个二进制数吗?文档太难理解了。
是否所有位都转换为有效数字?还是小数点的位置占用了一些位?
发布于 2012-11-25 00:26:58
浮点数是使用指数形式编码的,这有点像m * b ^ e
,也就是说,根本不像整数。您提出的问题在fixed point numbers的上下文中是有意义的。有许多可用的fixed point arithmetic libraries。
关于浮点算术:小数位数取决于表示和数字系统。例如,有一些周期数(0.33333
)没有十进制的有限表示,但有一个二进制表示,反之亦然。
同样值得一提的是,直到某一点的浮点数的差异确实大于1,即value + 1
产生value
,因为value + 1
不能使用m * b ^ e
编码,其中m
、b
和e
的长度是固定的。小于1的值也会发生同样的情况,即所有可能的代码点都不具有相同的距离。
因此,不存在像定点数字那样的精确n
数字的精度,因为并不是每个具有n
十进制数字的数字都具有IEEE编码。
有一个几乎是强制性的文档,你应该读一下,它解释了浮点数:What every computer scientist should know about floating point arithmetic。
发布于 2012-11-25 00:33:59
看看Float.intBitsToFloat
和Double.longBitsToDouble
,它们解释了位是如何对应浮点数的。具体地说,一个普通float
的部分看起来像这样
s * 2^exp * 1.ABCDEFGHIJKLMNOPQRSTUVW
其中A…W是23位-- 0和1s --表示二进制的分数-- s是+/- 1,分别用0或1表示,而exp是一个带符号的8位整数。
https://stackoverflow.com/questions/13542944
复制相似问题