Was ist der Maximalwert von * big.Int und max Präzision von * big.Rat?Golang, Mathematik/big: Was ist der höchste Wert von * big.Int
Antwort
Hier sind die Strukturdefinitionen:
// 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
}
Es gibt keine explizite Grenze. Das Limit ist Ihr Speicher oder theoretisch die maximale Array-Größe (2^31 oder 2^63, abhängig von Ihrer Plattform).
Wenn Sie praktische Bedenken haben, können Sie durch die in http://golang.org/src/pkg/math/big/nat_test.go gemacht Tests interessiert sein, zum Beispiel die, wo 10^100000 ist gebenchmarkt.
und Sie können leicht diese Art von Programm ausführen:
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)
}
(wenn Sie wollen, dass es schnell genug für Go Spielplatz laufen, use a smaller exponent than 100000
)
Das Problem wird nicht die maximale Größe sein, aber der verwendete Speicher und die Zeit, die solche Berechnungen benötigen.
Bei der Verwendung von 'math/big' sollten Sie versuchen, unnötige' große.Int' Zuordnungen zu vermeiden (insbesondere wenn sie in den Heap flüchten). Das obige kann schneller und einfacher gemacht werden, indem "temp" eliminiert wird, um den Schleifenkörper einfach zu machen: "sehr groß.Mul (sehr groß, zehn)". –
Danke @DaveC. Bewirb deinen Vorschlag. –
wer all diese Fragen und Antworten auf dem Gehen-Tag ablehnt? Diese Frage ist absolut gültig! – thwd