Java 大整数的Floored和欧氏除法

Java 大整数的Floored和欧氏除法,java,biginteger,integer-division,Java,Biginteger,Integer Division,Java的BigInteger类提供截断除法(商和余数)。从这一点出发,什么是最简单、最有效的方法来实现地板除法和欧几里德除法(商和余数)?根据:这应该是非常有效的。注意,这是在C语言而不是Java语言中测试效率的,但是看到差异非常小,我不认为它们在Java语言中会有很大的差异(实现之间的差异,而不是C和Java之间的差异),因为当前的Java编译器优化了很多 public BigInteger euclidianDivision(BigInteger a,BigInteger b){

Java的BigInteger类提供截断除法(商和余数)。从这一点出发,什么是最简单、最有效的方法来实现地板除法和欧几里德除法(商和余数)?

根据:这应该是非常有效的。注意,这是在C语言而不是Java语言中测试效率的,但是看到差异非常小,我不认为它们在Java语言中会有很大的差异(实现之间的差异,而不是C和Java之间的差异),因为当前的Java编译器优化了很多

public BigInteger euclidianDivision(BigInteger a,BigInteger b){
    return (a - (a<0 ? b-1 : 0)).divide(b)
}

public BigInteger flooredDivision(BigInteger a,BigInteger b){
    return (a + ( ((x<0) != (y<0))? b-1 : 0)).divide(b)
}

public BigInteger secondFlooredDivision(BigInteger a,BigInteger b){
    return (a + ( ((a ^ b) < 0)? b-1 : 0)).divide(b)
}
公共双整数欧氏除法(双整数a,双整数b){
return(a-(a根据的答案,以下是正确Java语法的实现(不包括floored divison的第二个变体):

public BigInteger euclidianDivision(BigInteger a, BigInteger b) {
    return
        a.subtract(
            a.compareTo(BigInteger.ZERO) < 0 ?
                b.subtract(BigInteger.ONE) :
                    BigInteger.ZERO
        ).divide(b)
}

public BigInteger flooredDivision(BigInteger a, BigInteger b) {
    return
        a.add(
            (a.compareTo(BigInteger.ZERO) < 0) != (b.compareTo(BigInteger.ZERO) < 0) ?
                b.subtract(BigInteger.ONE) :
                    BigInteger.ZERO
        ).divide(b);
}

你到底想要什么?为什么不使用BigDecimal?澄清一下,你希望结果向负无穷大取整,而不是向零取整?@SMA我正在用算术实现一阶逻辑的TPTP规范,它规定了所有三种整除。BigDecimal解决了另一个问题,除非我遗漏了什么?@OliverCharlesworth是的,比如说,看看番石榴
public BigInteger flooredRemainder(BigInteger a, BigInteger b) {
    return
        a.mod(b).subtract(
            b.compareTo(BigInteger.ZERO) < 0 ? BigInteger.ONE : BigInteger.ZERO
        );
}