Функция math.Frexp

Функция math.Frexp разбивает число с плавающей точкой на две части: нормализованную мантиссу и целую степень двойки. Она возвращает два значения: мантиссу в виде числа с плавающей точкой в диапазоне [0.5, 1) или (-1, -0.5] для отрицательных чисел, и показатель степени в виде целого числа. В первый параметр мы передаем исходное число для разложения. Второй параметр функции возвращается по ссылке в виде указателя на целое число.

Математически функция работает по формуле: x = mantissa × 2^exponent. Если исходное число равно нулю, функция возвращает 0.0 и 0. Эта функция полезна при работе с представлением чисел с плавающей точкой на низком уровне или при оптимизации вычислений.

Синтаксис

gomantissa, exponent := math.Frexp(x)

Пример

Давайте разложим положительное число 8.0 на мантиссу и степень:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  mantissa, exponent := math.Frexp(8.0)
  fmt.Printf("mantissa: %.1f, exponent: %d\n", mantissa, exponent)
}

Результат выполнения кода:

go"mantissa: 0.5, exponent: 4"

Проверяем: 0.5 × 2^4 = 0.5 × 16 = 8.0 — всё верно.

Пример

Давайте разложим отрицательное число -3.0:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  mantissa, exponent := math.Frexp(-3.0)
  fmt.Printf("mantissa: %.1f, exponent: %d\n", mantissa, exponent)
}

Результат выполнения кода:

go"mantissa: -0.8, exponent: 2"

Проверяем: -0.8 × 2^2 = -0.8 × 4 = -3.0 — всё верно.

Пример

Давайте разложим число 0.375:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  mantissa, exponent := math.Frexp(0.375)
  fmt.Printf("mantissa: %.2f, exponent: %d\n", mantissa, exponent)
}

Результат выполнения кода:

go"mantissa: 0.75, exponent: -1"

Проверяем: 0.75 × 2^(-1) = 0.75 × 0.5 = 0.375 — всё верно.

Смотрите также

  • функцию math.Ldexp,
    которая выполняет обратную операцию — умножает мантиссу на степень двойки
  • функцию math.Modf,
    которая разбивает число на целую и дробную части
  • функцию math.Log2,
    которая вычисляет двоичный логарифм числа
  • функцию math.Pow,
    которая возводит число в указанную степень