给定整数 exp
和 0<=sig<2^52
,如何使用 exp
创建 float64作为指数,其有效位与 sig
的二进制表示相同(在围棋中)?
最佳答案
IEEE-754 standard定义了 Go 用于 float 的浮点算法,例如 float32
和 float64
(就像几乎所有其他语言一样)。
由于您的尾数可能高达 52 位,显然它只能使用 float64
值来表示。
float64
值的内存布局(位)在 Double-precision floating-point format 中描述。 .
这是一张 float64
值的图片(取自维基百科):
您声称您拥有指数值和尾数(即小数部分)。
您可以使用简单的按位运算来构造 float 的 64 位值,如下所示:
bits := exp<<52 | sig
(注意:exp
和sig
应该是uint64
类型。如果不是,使用类型转换。)
一旦你有了位,你可以使用 math.Float64frombits()
函数将其作为 float64
值获取:
f := math.Float64frombits(bits)
请注意,内存布局的指数值不是您在计算数字值时必须使用的“直接”数字,而是:
The double-precision binary floating-point exponent is encoded using an offset-binary representation, with the zero offset being 1023; also known as exponent bias in the IEEE 754 standard.
所以以上述 double 格式编码的数字计算如下:
(-1)sign x 2e-1023 x 1.fraction
关于go - 从指数和尾数创建 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53276811/