20

*big.Intの最大値と*big.Rat最大精度は?

4

1 に答える 1

17

構造定義は次のとおりです。

// 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ください)

問題は最大サイズではなく、使用されるメモリとそのような計算にかかる時間です。

于 2013-07-10T07:10:26.920 に答える