关于java中float最大值,最小值问题

其中,在m的赋值过程中,有一个三元运算符,如果e!=0(即指数不为0),那么取bits的前23位数字再或上0x800000,这样取得的数字是24位,而不是23位;如果e==0(即指数为0),那么取bits的前23位数字(这是23位),如果不左移一位的话就与指数不为0的情况所得的位数不一样了。所以要左移一位。...
关于java中float最大值,最小值问题
我想了2个小时吧,虽然答案不确定,但是还是想把自己的想法说出来:
首先,这是API文档的内容:
在所有其他情况下,设 s、e 和 m 为可以通过以下参数进行计算的三个值;

int s = ((bits >> 31) == 0) ? 1 : -1;
int e = ((bits >> 23) & 0xff);
int m = (e == 0) ?
(bits & 0x7fffff) << 1 :
(bits & 0x7fffff) | 0x800000;

那么浮点结果等于算术表达式 s·m·2^(e-150) 的值。

在这里,s表示正负,e表示指数,m表示尾数(即浮点数的有效数字)。
其中,在m的赋值过程中,有一个三元运算符,
如果e!=0(即指数不为0),那么取bits的前23位数字再或上0x800000,这样取得的数字是24位,而不是23位;

如果e==0(即指数为0),那么取bits的前23位数字(这是23位),如果不左移一位的话就与指数不为0的情况所得的位数不一样了。
所以要左移一位。
当然,位数如果有增减,肯定会用s·m·2^(e-150)这个公式中的'150'来弥补以保证数值的正确的。

我是这么理解的,当然也没搞清楚'150'的由来。 仅供讨论吧...2013-12-11
为何要移位,要看intBitsToFloat函数意义和要求。2013-12-11
mengvlog 阅读 70 次 更新于 2025-10-29 01:57:58 我来答关注问题0
檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部