gpt4 book ai didi

java - 参数 13 和 30 的 Pow() 函数失败

转载 作者:行者123 更新时间:2023-12-02 02:27:55 27 4
gpt4 key购买 nike

我有一个小问题:为什么在java中计算13^30 mod 31时得到的结果是25?结果应该是 1。谢谢您提前的答复。附注我把代码写在https://www.compilejava.net/

import java.lang.Math; 
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(calculateModulo());

}

public static String calculateModulo(){

String res = new String();

for (int i = 1; i < 31; i++){
for (int j = 1; j < 31; j++){

double var = Math.pow((double)i, (double)j);


if (j == 30) {
System.out.println("adding: "+i);
res = res + " " + i;
}
if (var % 31 == 1) {
System.out.println("The number " + i +" to the power of "+j +" modulo 31 results in "+var % 31);
break;
}

}
}
System.out.println(Math.pow(13,30)+" "+(Math.pow(13,30)%31)); // why is the output of this "2.619995643649945E33 25.0"
return res;
}
}

最佳答案

您将这些操作的结果存储在double中。请注意,double 只有 64 个字节长。 64 字节无法准确存储 1330 的结果。不,编译器也无法通过技巧来计算它。请参阅Is floating point math broken?

尝试使用BigInteger:

BigInteger a = new BigInteger("13");
BigInteger b = a.pow(30);
BigInteger c = b.mod(new BigInteger("31"));
System.out.println(c);

关于java - 参数 13 和 30 的 Pow() 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47558254/

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