2017-10-15 37 views
2

modの結果が実際に正しい場合でも私は等価性をテストすると何らかの理由で私は大きなintから間違った結果を得ています! 例えば、私は大きなint型を使用する場合、私はこれを行うとき、私は偽の取得1.大きいint私に平等で間違った結果を与える

、その結果2 2015パーセントを計算したいと思います:

fmt.Println((test.Mod(big.NewInt(2015),big.NewInt(2)))==big.NewInt(1)) 

しかし、私は定期的にint型を使用する場合、私は正しい(とにかく正しい):

fmt.Println(2015%2==1) 

big intを使用すると、私は平等を違う方法で行うことになっていますか?

答えて

1

Package big

import "math/big" 

func NewInt

func NewInt(x int64) *Int 

NewIntを割り当て、新しいintはXに設定戻ります。

func (*Int) Cmp

func (x *Int) Cmp(y *Int) (r int) 

CMPは、xとyとを比較し、戻り値:*big.Int

-1 if x < y 
0 if x == y 
+1 if x > y 

変数abはポインタです。 Cmpメソッドを使用して値を比較します。例えば、

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    a := big.NewInt(42) 
    fmt.Printf("a: %[1]T %[1]p %[1]v\n", a) 
    b := big.NewInt(42) 
    fmt.Printf("b: %[1]T %[1]p %[1]v\n", b) 
    fmt.Println("pointers:", a == b)  // compare pointers 
    fmt.Println("values: ", a.Cmp(b) == 0) // compare values 

    fmt.Println() 
    test := new(big.Int) 
    fmt.Println((test.Mod(big.NewInt(2015), big.NewInt(2))).Cmp(big.NewInt(1)) == 0) 
} 

遊び場:https://play.golang.org/p/TH6UzceZ4y

出力:

a: *big.Int 0x1040a0c0 42 
b: *big.Int 0x1040a0d0 42 
pointers: false 
values: true 

true 
0

(* int)Cmp関数を見てください。

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    a := big.NewInt(5) 
    b := big.NewInt(5) 
    fmt.Println(a == b) 
    fmt.Println(a.Cmp(b)) 
} 
関連する問題