РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
353 of 1593 menu

Тип big.Float

Тип big.Float из пакета math/big представляет число с плавающей точкой произвольной точности. В отличие от встроенных типов float32 и float64, big.Float позволяет работать с числами, имеющими произвольное количество знаков после запятой, и не ограничен стандартными пределами точности. Это делает его незаменимым для финансовых расчетов, криптографии, научных вычислений и других областей, где критична высокая точность. При создании нового экземпляра через new(big.Float) или big.NewFloat, вы можете указать желаемую точность в битах через метод SetPrec. Основные арифметические операции — сложение, вычитание, умножение и деление — выполняются методами Add, Sub, Mul и Quo соответственно.

Создание и базовая настройка

Создать big.Float можно несколькими способами. Рассмотрим основные из них:

package main import ( "fmt" "math/big" ) func main() { // Способ 1: через new f1 := new(big.Float) fmt.Println(f1) // Способ 2: через big.NewFloat с установкой значения f2 := big.NewFloat(3.14159) fmt.Println(f2) // Способ 3: установка точности (в битах) f3 := new(big.Float).SetPrec(100) fmt.Println(f3) }

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

0 3.14159 0

Арифметические операции

Все арифметические операции с big.Float выполняются методами, которые изменяют сам объект и возвращают его же для цепочки вызовов. Рассмотрим основные операции:

package main import ( "fmt" "math/big" ) func main() { a := big.NewFloat(10.5) b := big.NewFloat(3.2) // Сложение res := new(big.Float).Add(a, b) fmt.Println(res) // Вычитание res.Sub(a, b) fmt.Println(res) // Умножение res.Mul(a, b) fmt.Println(res) // Деление res.Quo(a, b) fmt.Println(res) }

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

13.7 7.3 33.6 3.28125

Сравнение чисел

Для сравнения двух big.Float используется метод Cmp, который возвращает -1 если первое число меньше второго, 0 если они равны, и 1 если первое число больше второго. Учтите, что сравнение происходит с учетом текущей точности:

package main import ( "fmt" "math/big" ) func main() { a := big.NewFloat(5.5) b := big.NewFloat(5.5000) // Сравнение чисел cmp := a.Cmp(b) fmt.Println(cmp) c := big.NewFloat(10.0) cmp = a.Cmp(c) fmt.Println(cmp) }

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

0 -1

Преобразование в строку

Для преобразования big.Float в строку используется метод String или Text с указанием формата. Метод Text позволяет вывести число в различных системах счисления:

package main import ( "fmt" "math/big" ) func main() { f := big.NewFloat(123.456) // Стандартное преобразование fmt.Println(f.String()) // Text с указанием формата и точности fmt.Println(f.Text('f', 2)) fmt.Println(f.Text('e', 3)) }

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

123.456 123.46 1.235e+02

Операции с высокой точностью

Одним из главных преимуществ big.Float является возможность работы с числами, имеющими большое количество знаков после запятой. Установим высокую точность и выполним сложные вычисления:

package main import ( "fmt" "math/big" ) func main() { // Устанавливаем точность в 200 бит prec := uint(200) pi := new(big.Float).SetPrec(prec).SetFloat64(3.141592653589793) // Выполняем возведение в квадрат с высокой точностью res := new(big.Float).SetPrec(prec).Mul(pi, pi) fmt.Println(res.String()) }

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

9.869604401089358618834490999876151135313699407240790626413349

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

  • тип big.Int,
    предназначенный для работы с целыми числами произвольной точности
  • тип big.Rat,
    предназначенный для работы с рациональными числами
  • функцию big.NewFloat,
    создающую новый big.Float из значения float64
  • метод big.Float.SetPrec,
    устанавливающий точность числа в битах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить