Функция math.Frexp
Функция math.Frexp разбивает число с плавающей точкой на две части: нормализованную мантиссу и целую степень двойки. Она возвращает два значения: мантиссу в виде числа с плавающей точкой в диапазоне [0.5, 1) или (-1, -0.5] для отрицательных чисел, и показатель степени в виде целого числа. В первый параметр мы передаем исходное число для разложения. Второй параметр функции возвращается по ссылке в виде указателя на целое число.
Математически функция работает по формуле: x = mantissa × 2^exponent. Если исходное число равно нулю, функция возвращает 0.0 и 0. Эта функция полезна при работе с представлением чисел с плавающей точкой на низком уровне или при оптимизации вычислений.
Синтаксис
mantissa, exponent := math.Frexp(x)
Пример
Давайте разложим положительное число 8.0 на мантиссу и степень:
package main
import (
"fmt"
"math"
)
func main() {
mantissa, exponent := math.Frexp(8.0)
fmt.Printf("mantissa: %.1f, exponent: %d\n", mantissa, exponent)
}
Результат выполнения кода:
"mantissa: 0.5, exponent: 4"
Проверяем: 0.5 × 2^4 = 0.5 × 16 = 8.0 — всё верно.
Пример
Давайте разложим отрицательное число -3.0:
package main
import (
"fmt"
"math"
)
func main() {
mantissa, exponent := math.Frexp(-3.0)
fmt.Printf("mantissa: %.1f, exponent: %d\n", mantissa, exponent)
}
Результат выполнения кода:
"mantissa: -0.8, exponent: 2"
Проверяем: -0.8 × 2^2 = -0.8 × 4 = -3.0 — всё верно.
Пример
Давайте разложим число 0.375:
package main
import (
"fmt"
"math"
)
func main() {
mantissa, exponent := math.Frexp(0.375)
fmt.Printf("mantissa: %.2f, exponent: %d\n", mantissa, exponent)
}
Результат выполнения кода:
"mantissa: 0.75, exponent: -1"
Проверяем: 0.75 × 2^(-1) = 0.75 × 0.5 = 0.375 — всё верно.
Смотрите также
-
функцию
math.Ldexp,
которая выполняет обратную операцию — умножает мантиссу на степень двойки -
функцию
math.Modf,
которая разбивает число на целую и дробную части -
функцию
math.Log2,
которая вычисляет двоичный логарифм числа -
функцию
math.Pow,
которая возводит число в указанную степень