Ethiopian multiplication: Difference between revisions

Content added Content deleted
Line 508: Line 508:
}
}
}</lang>
}</lang>
An optimised varient.
<lang java5>
/**
* This method will use etiopian styled multiplication.
* @param a Any non-negative integer.
* @param b Any integer.
* @result a multiplied by b
*/
public static int etiopianMultiply(int a, int b) {
if(a==0 || b==0) {
return 0;
}
int result = 0;
while(a>=1) {
if((a&1) == 1) {
result+=b;
}
b<<=1;
a>>>=1;
}
return result;
}

/**
* This method is an improved version that will use
* etiopian styled multiplication, but can fully
* support negative parameters.
* @param a Any integer.
* @param b Any integer.
* @result a multiplied by b
*/
public static int etiopianMultiplyWithImprovement(int a, int b) {
if(a==0 || b==0) {
return 0;
}
if(a<0) {
a=-a;
b=-b;
} else if(b>0 && a>b) {
int tmp = a;
a = b;
b = tmp;
}
int result = 0;
while(a>=1) {
if((a&1) == 1) {
result+=b;
}
b<<=1;
a>>>=1;
}
return result;
}
</lang>


== {{header|JavaScript}} ==
== {{header|JavaScript}} ==