Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更容易+;二进制除法的最佳方法_Java_Performance_Algorithm_Binary - Fatal编程技术网

Java 更容易+;二进制除法的最佳方法

Java 更容易+;二进制除法的最佳方法,java,performance,algorithm,binary,Java,Performance,Algorithm,Binary,有谁能建议在Java中不使用递归进行二进制除法的最简单+最佳方法是什么 我有下面的代码,虽然工作得很好,但我相信这个基本的数学函数在这里应该更容易 private static int div(int dividend, int divisor) { int denom = divisor; int count = 1; while (denom <= dividend) { denom <<= 1; count <

有谁能建议在Java中不使用递归进行二进制除法的最简单+最佳方法是什么

我有下面的代码,虽然工作得很好,但我相信这个基本的数学函数在这里应该更容易

private static int div(int dividend, int divisor) {
    int denom = divisor;
    int count = 1;
    while (denom <= dividend) {
        denom <<= 1;
        count <<= 1;
    }
    if (denom > dividend) {
        denom >>= 1; count >>= 1;
    }

    int answer = 0;
    // Now find the smaller dividend
    while (count != 0) {
        if (dividend >= denom) {
            dividend = dividend - denom;
            // Consume the count value;
            answer = answer + count;
        }
        count >>>= 1;
        denom >>= 1;
    }

    return answer;
}
私有静态整数div(整数被除数,整数除数){
int denom=除数;
整数计数=1;
而(denom=1;
}
int-answer=0;
//现在找到较小的红利
while(计数!=0){
如果(股息>=denom){
股息=股息-denom;
//消耗计数值;
答案=答案+计数;
}
计数>>=1;
denom>>=1;
}
返回答案;
}

你的直觉是正确的;这有一个简单的说法:

private static int div(int dividend, int divisor) {
  return dividend / divisor;
}

你的直觉是正确的;这有一条直线:

private static int div(int dividend, int divisor) {
  return dividend / divisor;
}

简而言之,除法是一种难以实现的算法

上面概述的算法是每次迭代生成一位,并且(作为除法器)相当简单

还有一些其他的算法每次迭代也会产生1位的结果(例如CORDIC和二进制恢复)。它们都不是一个或两个线性函数,但是你可能会发现其中一个更简单、更容易理解


还有其他除法器算法可以在每次迭代中产生更多的位。例如,SRT基数-4除法器可以在每次迭代中产生4位。代价是算法更复杂。如果你对你给出的算法有困难,我的直接猜测是,你会在可怕和完全希望之间找到这些算法更少。

简而言之,除法是一种难以实现的算法

上面概述的算法是每次迭代生成一位,并且(作为除法器)相当简单

还有一些其他的算法每次迭代也会产生1位的结果(例如CORDIC和二进制恢复)。它们都不是一个或两个线性函数,但是你可能会发现其中一个更简单、更容易理解


还有其他除法器算法可以在每次迭代中产生更多的位。例如,SRT基数-4除法器可以在每次迭代中产生4位。代价是算法更复杂。如果你对你给出的算法有困难,我的直接猜测是,你会在可怕和完全希望之间找到这些算法更少。

这不是一个递归函数,而是一个迭代函数。到底是什么问题?这段代码可以工作。为什么你认为它应该更容易,更容易意味着什么?可能代码行更少。“更容易键入”你正在用一种很难的方法来做。b用手工来做,而不是用
/
,因此很难建议如何用更简单的方法来做。简单得多:返回除数/除数;这不是一个递归函数,而是一个迭代函数。到底是什么问题?这段代码很有效。你为什么认为它应该更容易,更容易是什么意思?代码行可能更少。“更容易键入”你正在用一种很难的方法来做这件事。b手工做而不是用
/
,因此很难建议如何用更简单的方法来做。简单得多:返回除数/除数;我不想用除法运算符,但我给你+1表示双关!我不想用除法运算符,但我给你+1表示双关!