2013-07-10 20 views

cevap

14

İşte yapısı tanımları şunlardır:

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

hiçbir açık bir sınır yoktur. Sınır, belleğiniz veya teorik olarak maksimum dizi boyutu (platformunuza bağlı olarak 2^31 veya 2^63) olacaktır. Eğer pratik endişeleriniz varsa


, örneğin bir 10^100000 karşılaştırıldığı nerede, http://golang.org/src/pkg/math/big/nat_test.go yapılan testlerle ilginizi çekebilir.

Ve kolayca programın bu tür çalıştırabilirsiniz:

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

sorun maksimum boyutu olmayacak (bunu, git Oyun için yeterince hızlı use a smaller exponent than 100000 çalıştırmak istiyorsanız) ancak kullanılan hafıza ve bu tür hesaplamalar zaman alır. Tüm bu soruları ve cevapları go etiketinde aşağı çeken

+1

'math/big' kullanırken gereksiz big büyük.Int' tahsisleri denemelisiniz (özellikle de yığına kaçarsa). Yukarıda, döngü gövdesini sadece 'temp' yaparak ortadan kaldırarak daha hızlı ve basit hale getirilebilir: 'verybig.Mul (verybig, ten)'. –

+0

Teşekkürler @DaveC. Önerinizi uyguladı. –