Стандарт IEEE-754 определяет арифметику с плавающей запятой, которую Go использует для чисел с плавающей запятой, таких как float32
и float64
(как и почти любой другой язык).
Так как ваш значение может составлять до 52 бит, очевидно, что оно может быть представлено только с использованием значения float64
.
Структура памяти (биты) значения float64
описана в Двойная точностьФормат с плавающей точкой .
Вот изображение битов со значением float64
(взято из Википедии):
Вы утверждаете, что у вас есть значение степени и значение и значение (которое является дробной частью).
Вы можете использовать простую побитовую арифметику для построения 64-битного значения с плавающей запятой, например:
bits := exp<<52 | sig
(Примечание: exp
и sig
должны иметь тип uint64
. Если нет, используйте преобразование типа.)
Как только у вас есть биты, вы можете использовать *Функция 1033 *math.Float64frombits()
для получения значения float64
:
f := math.Float64frombits(bits)
Обратите внимание, что экспонентEnt значение макета памяти - это не «прямое» число, которое вы должны использовать при вычислении значения числа, а:
Бинарный показатель с плавающей запятой двойной точности кодируется с использованием смещение-двоичное представление с нулевым смещением 1023;также известный как смещение экспоненты в стандарте IEEE 754.
Таким образом, число, закодированное в вышеуказанном формате двойной точности, рассчитывается следующим образом:
(- 1) знак x 2 e-1023 x 1.фракция