问题描述
我想将这两个数字相乘:
00100010000000000000000000000000(1.73472347598e-18)
和
00010101000000000000000000000001(-2.997414069111348324895269018E-38)
规则是:
(e1-127)+ e2
所以指数是
(68-127)+ 42 = -17
-17不能以IEEE754格式表示代表
此计算器表示指数为-126。 但是我该如何手工计算呢?
解决方法
第一:更正
00010101000000000000000000000001
不是-2.997414069111348324895269018E-38
,而是2.58493972238e-26
。
参见IEEE-754 Floating Point Converter
1.73472347598e-18 * 2.58493972238e-26
的乘积约为4.48416e-44
或十六进制/二进制表示形式0x1.0000002p-144
。 -144-(-127)是-17所追求的。
我该如何手动计算?
说指数是-126
“-17不能以IEEE754格式表示”。
乘积小于最小的归一化的值(有偏指数小于1),但大于最小的次归一化值。 IEEE format牺牲精度以扩展微小值的范围。将-17增大到1(即-126的有偏指数),然后将有效数0x1.000002
右移18。
s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm
0 00000000 00000000000000000100000
+0.00000000000000000100000 2 * 2 1-127
当编码的有偏指数为0时,将编码解释为有偏指数为1,但隐含的1位现在为0。