由于某些原因,即使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时,我是否应该以不同的方式做同样的事?
答案 0 :(得分:4)
import "math/big"
func NewInt(x int64) *Int
NewInt分配并返回一个新的Int集合到x。
func (x *Int) Cmp(y *Int) (r int)
Cmp比较x和y并返回:
-1 if x < y 0 if x == y +1 if x > y
变量a
和b
是指针:*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))
}