Java 具有大双精度值的最大公约数
Java greater common divisor with big double values
我正在尝试用双打实现 gcd。
这是我的代码:
public static double doubleGcd(double n1, double n2) {
if (n2 != 0)
return doubleGcd(n2, n1 % n2);
else
return n1;
}
它运行良好,直到我用一些大的值对其进行测试。
作为示例,我使用了:
- n1: Math.pow(10,25)
- n2: 14400
GCD 是 1600 但我的代码 return 64.
我认为原因是模运算符和值太大,但我不知道如何更改代码以使其工作。
我能够通过使用 BigDecimal 而不是 Double 类型来解决我的问题。
这是我的新代码:
public static BigDecimal Gcd(BigDecimal n1, BigDecimal n2) {
if (n2.compareTo(new BigDecimal(0)) != 0)
return Gcd(n2, n1.remainder(n2));
else
return n1;
}
Bigdecimal .remainder() 与模运算不同,但在这种情况下它也适用。
我正在尝试用双打实现 gcd。
这是我的代码:
public static double doubleGcd(double n1, double n2) {
if (n2 != 0)
return doubleGcd(n2, n1 % n2);
else
return n1;
}
它运行良好,直到我用一些大的值对其进行测试。
作为示例,我使用了:
- n1: Math.pow(10,25)
- n2: 14400
GCD 是 1600 但我的代码 return 64.
我认为原因是模运算符和值太大,但我不知道如何更改代码以使其工作。
我能够通过使用 BigDecimal 而不是 Double 类型来解决我的问题。
这是我的新代码:
public static BigDecimal Gcd(BigDecimal n1, BigDecimal n2) {
if (n2.compareTo(new BigDecimal(0)) != 0)
return Gcd(n2, n1.remainder(n2));
else
return n1;
}
Bigdecimal .remainder() 与模运算不同,但在这种情况下它也适用。