给定整数exp和0<=sig<2^52,我如何创建exp指数为 float64 且其有效位与(在 Go 中)的二进制表示相同的sig?
1 回答
烙印99
TA贡献1829条经验 获得超13个赞
IEEE -754 标准定义了 Go 用于浮点数的浮点算法,例如float32
and float64
(就像几乎所有其他语言一样)。
由于您的有效数字可能高达 52 位,显然它只能使用一个float64
值来表示。
这是一个值的位图float64
(取自维基百科):
你声称你有指数值和尾数(这是小数部分)。
您可以使用简单的按位运算来构造浮点的 64 位值,如下所示:
bits := exp<<52 | sig
(注意:exp
并且sig
应该是类型uint64
。如果不是,请使用类型转换。)
一旦你有了这些位,你就可以使用math.Float64frombits()
函数将它作为一个float64
值来获取:
f := math.Float64frombits(bits)
请注意,内存布局的指数值不是您在计算数字值时必须使用的“直接”数字,而是:
双精度二进制浮点数指数采用偏移二进制表示法编码,零偏移为1023;在 IEEE 754 标准中也称为指数偏差。
因此,以上述双精度格式编码的数字计算如下:
(-1)符号x 2 e-1023 x 1.分数
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消