2013-07-10 28 views

答えて

14

は、構造の定義です:

// 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)になります。あなたは実用的な懸念がある場合


は、あなたが例えば1 10^100000をベンチマークしている場合、http://golang.org/src/pkg/math/big/nat_test.goで行われた試験により興味があるかもしれません。

そして、あなたは簡単にこの種のプログラムを実行することができます。

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

問題は最大の大きさではありません(それは、ゴー遊び場のために十分な速さuse a smaller exponent than 100000を実行する場合)が、使用されたメモリ、およびそのような計算にかかる時間が含まれる。

+1

'math/big'を使うときは、不要な' big.Int'割り振りを避けてください(特にヒープにエスケープする場合)。 'tempb'を削除することで、ループボディを' verybig.Mul(verybig、ten) 'にするだけで、上記をより速く簡単にすることができます。 –

+0

ありがとう@DaveC。あなたの提案を適用しました。 –

関連する問題