一 需求:
测试现代CPU整数乘法 VS 埃及乘法
二 测试代码:
#include <iostream>
using namespace std;
inline bool odd(int n) {
return n & 0x01;
}
inline int half(int n) {
return n >> 1;
}
inline int doubling(int n) {
return n << 1;
}
int multiply0(int n, int a) {
return n * a;
}
int multiply1(int n, int a) {
if (1 == n) {
return a;
}
int ret = multiply1(half(n), doubling(a));
if (odd(n)) {
ret += a;
}
return ret;
}
int multiply2(int n, int a) {
int ret = 0;
while (true) {
if (odd(n)) {
ret += a;
if(1 == n) {
break;
}
}
a = doubling(a);
n = half(n);
}
return ret;
}
int main() {
for (int i = 0;i < 1000000;i++) {
// multiply0(410, 519); // 0.013s
// multiply1(410, 519); // 0.069s
multiply2(410, 519); // 0.065s
}
return 0;
}