go biginteger

Golang, math/big: cuál es el valor máximo de*big.Int



biginteger (1)

¿Cuál es el valor máximo de * big.Int y la precisión máxima de * big.Rat ?


Aquí están las definiciones de la estructura:

// 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 }

No hay un límite explícito. El límite será su memoria o, teóricamente, el tamaño máximo de la matriz (2 ^ 31 o 2 ^ 63, dependiendo de su plataforma).

Si tiene inquietudes prácticas, puede que le interesen las pruebas realizadas en http://golang.org/src/pkg/math/big/nat_test.go , por ejemplo, en el que se compara 10 ^ 100000.

Y puede ejecutar fácilmente este tipo de programa:

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) }

(si quieres que funcione lo suficientemente rápido para Go Playground, usa un exponente más pequeño que 100000 )

El problema no será el tamaño máximo, sino la memoria utilizada y el tiempo que tardan dichos cálculos.