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