比lua更快的脚本luc
2015年,写了一个C++语法的脚本,经过测试,性能比lua差太多,就没有继续。今年,闲来无事,继续研究,到底比lua慢在哪里?经过优化,重构,再次优化,再次重构,性能已经比lua快,差不多比lua快3倍的样子。
测试例子,是循环很多次,计算开方、三次开方,结果如下图:
测试代码lua:
function LuaSqrt(x)
a = x;
x1 = 1;
x2 = 2;
while (x ~= 0 and (x2 <= 0.9999999999 or 1.0000000001 <= x2))
do
x1 = x;
x = (x1*x1 + a) / 2 / x1;
x2 = x / x1;
end
return x;
end;
function LuaSqrt3(x)
a = x;
x1 = 1;
x2 = 2;
while (x ~= 0 and (x2 <= 0.9999999999 or 1.0000000001 <= x2))
do
x1 = x;
x = (x1*x1*x1 + a) / 2 / x1 / x1;
x2 = x / x1;
end
return x;
end;
function TestCase()
result = 0;
result3 = 0;
i = 0;
loopCount = 1000000;
--loopCount = 1000;
sqrtSource = 22000000000.0;
while (i < loopCount)
do
i = i + 1;
result = LuaSqrt(sqrtSource);
result3 = LuaSqrt3(sqrtSource);
end
print("result = " .. result .. "\tresult3 = " .. result3);
end
测试代码luc:
double LucSqrt(double x)
{
double a = x;
double x1 = 1;
double x2 = 2;
while (x!=0 && (x2<=0.9999999999 || 1.0000000001<=x2))
{
x1 = x;
x = (x1*x1+a)/2/x1;
x2 = x/x1;
}
return x;
}
double LucSqrt3(double x)
{
double a = x;
double x1 = 1;
double x2 = 2;
while (x!=0 && (x2<=0.9999999999 || 1.0000000001<=x2))
{
x1 = x;
x = (x1*x1*x1+a)/2/x1/x1;
x2 = x/x1;
}
return x;
}
void TestCase(void)
{
double result = 0;
double result3 = 0;
int i = 0;
int loopCount = 1000000;
// int loopCount = 1000;
double sqrtSource = 22000000000.0;
while (i < loopCount)
{
i = i + 1;
result = LucSqrt(sqrtSource);
result3 = LucSqrt3(sqrtSource);
}
_tprintf(_T("result = %lf\t\tresult3 = %lf\r\n"), result, result3);
}
TestCase();