gpt4 book ai didi

go - 大整数给我错误的平等结果

转载 作者:IT王子 更新时间:2023-10-29 01:01:31 26 4
gpt4 key购买 nike

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

当我使用 big int 时,我会得到 false:

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

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

fmt.Println(2015%2==1)

我是否应该在使用 big int 时以不同的方式处理相等性?

最佳答案

Package big

import "math/big"

func NewInt

func NewInt(x int64) *Int

NewInt allocates and returns a new Int set to x.

func (*Int) Cmp

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

Cmp compares x and y and returns:

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

Playground :https://play.golang.org/p/TH6UzceZ4y

输出:

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

true

关于go - 大整数给我错误的平等结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com