Java 更容易+;二进制除法的最佳方法
有谁能建议在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 <
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表示双关!