整数可以这样初始化:int i = 0b0001;
我想类似地用二进制创建一个浮点数,所以我找到了 Float.intBitsToFloat(int) 方法,这样我就能够这样初始化一个浮点数:float f = Float.intBitsToFloat(0b0001);
但 Float.intBitsToFloat(int) 方法的注释中说:
"Note that this method may not be able to return a float NaN with exactly same bit pattern as the int argument."
所以,我想问是否有方法能够避免上面的“不足”,使我能够完全准确地用二进制初始化一个浮点数?
1
OysterQAQ 2021-11-16 21:12:47 +08:00
自己再包一层 判断下介码全 0 和全 1 呗 不就解决了
|
2
Buges 2021-11-16 21:23:32 +08:00 via Android
如果你想从 byte 得到 float 的话,还需要考虑 endianess ,建议用专门的库。
|
3
Higurashi OP @OysterQAQ #1
感谢回复。意思是判断指数位是否为全 1 ,全为 1 则给出提示?这似乎并没有真正在用二进制“初始化”浮点数。 |
4
OysterQAQ 2021-11-16 21:33:28 +08:00
@Higurashi 你看看 IEEE 754 浮点数的标准吧 第 1 位符号 然后 7 位介码(移码表示) 23 位的尾数(隐含了一位 1 ) 注释说没办法判断 NaN ,754 中的 NaN 指的就是介码全 1 尾数非 0 ,意思是你在用 Float.intBitsToFloat(0b0001)之前判断下 7 位介码就行了
|