根据指数和有效数创建浮点数

时间:2018-11-13 08:32:20

标签: go floating-point binary

给出整数exp0<=sig<2^52,如何创建以exp为指数并且其有效位与sig的二进制表示形式相同的float64(在去)?

1 个答案:

答案 0 :(得分:2)

IEEE-754 standard定义了Go用于浮点数的浮点算法,例如float32float64(几乎与其他任何语言一样)。

由于有效位数最多为52位,因此显然只能使用float64值来表示。

Double-precision floating-point format中描述了float64值的内存布局(位)。

下面是float64值的各个位的图片(来自维基百科):

enter image description here

您声称自己具有指数值和有效位数(即小数部分)。

您可以使用简单的按位算法来构造浮点的64位值,如下所示:

bits := exp<<52 | sig

(注意:expsig的类型应为uint64。如果不是,请使用类型转换。)

一旦有了这些位,就可以使用math.Float64frombits()函数将其作为float64值来获取:

f := math.Float64frombits(bits)

请注意,内存布局的指数值不是计算数字值时必须使用的“直接”数字,而是:

  

使用offset-binary表示对双精度二进制浮点指数进行编码,零偏移为1023;在IEEE 754标准中也称为指数偏差。

因此,以上述双精度格式编码的数字的计算方式如下:

  

(-1) sign x 2 e-1023 x 1.fraction