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

它运行良好,直到我用一些大的值对其进行测试。

作为示例,我使用了:

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() 与模运算不同,但在这种情况下它也适用。

文档: BigDecimal.remainder()