big int给我错误的结果

时间:2017-10-15 05:57:55

标签: go bigint

由于某些原因,即使mod结果实际上是正确的,当我测试相等性时,我从big int得到了错误的结果! 例如,我想计算2015%2,结果为1。

当我使用big int时,我在执行此操作时会出错:

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

然而,当我使用常规int时,我得到了真(无论如何这是正确的):

fmt.Println(2015%2==1)

使用big int时,我是否应该以不同的方式做同样的事?

2 个答案:

答案 0 :(得分:4)

  

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并返回:

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

变量ab是指针:*big.Int。使用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

答案 1 :(得分: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))
}