Golang, math/big: каково максимальное значение * big.Int - программирование

Golang, math/big: каково максимальное значение * big.Int

Каково максимальное значение * big.Int и максимальная точность * big.Rat?

4b9b3361

Ответ 1

Вот определения структуры:

// A Word represents a single digit of a multi-precision unsigned integer.
type Word uintptr

type nat []Word

type Int struct {
    neg bool // sign
    abs nat  // absolute value of the integer
}

type Rat struct {
    // To make zero values for Rat work w/o initialization,
    // a zero value of b (len(b) == 0) acts like b == 1.
    // a.neg determines the sign of the Rat, b.neg is ignored.
    a, b Int
}

Нет явного предела. Предел будет вашей памятью или, теоретически, максимальным размером массива (2 ^ 31 или 2 ^ 63, в зависимости от вашей платформы).


Если у вас есть практические проблемы, вас могут заинтересовать тесты, сделанные в http://golang.org/src/pkg/math/big/nat_test.go, например, тот, где 10 ^ 100000 сравнивается.

И вы можете легко запустить такую ​​программу:

package main

import (
    "fmt"
    "math/big"
)

func main() {
    verybig := big.NewInt(1)
    ten := big.NewInt(10)
    for i:=0; i<100000; i++ {
       verybig.Mul(verybig, ten)
    }
    fmt.Println(verybig)
}

(если вы хотите, чтобы он работал достаточно быстро для Go Playground, используйте меньшую экспоненту, чем 100000)

Проблема заключается не в максимальном размере, а в используемой памяти и времени, в которое принимают такие вычисления.