给出整数exp
和0<=sig<2^52
,如何创建以exp
为指数并且其有效位与sig
的二进制表示形式相同的float64(在去)?
答案 0 :(得分:2)
IEEE-754 standard定义了Go用于浮点数的浮点算法,例如float32
和float64
(几乎与其他任何语言一样)。
由于有效位数最多为52位,因此显然只能使用float64
值来表示。
Double-precision floating-point format中描述了float64
值的内存布局(位)。
下面是float64
值的各个位的图片(来自维基百科):
您声称自己具有指数值和有效位数(即小数部分)。
您可以使用简单的按位算法来构造浮点的64位值,如下所示:
bits := exp<<52 | sig
(注意:exp
和sig
的类型应为uint64
。如果不是,请使用类型转换。)
一旦有了这些位,就可以使用math.Float64frombits()
函数将其作为float64
值来获取:
f := math.Float64frombits(bits)
请注意,内存布局的指数值不是计算数字值时必须使用的“直接”数字,而是:
使用offset-binary表示对双精度二进制浮点指数进行编码,零偏移为1023;在IEEE 754标准中也称为指数偏差。
因此,以上述双精度格式编码的数字的计算方式如下:
(-1) sign x 2 e-1023 x 1.fraction