文章插图
c语言快速开平方常数的不完全优化报告
原始程序采用C1=0x5f3759df , 本文采用C2=0x5f352267 ,
在对1-256之内的小数进行开平方时 , 测试报告如下:
程序外循环10000次*内循环256次、人工执行exe程序60次的结果:
C1=0x5f3759df19.48333333 ms
C2=0x5f35226719.28333333 ms
normal_c_sqrtf20.43333333 ms
分别一次牛顿迭代 , 相对c语言sqrtf计算结果的精度:
C1=0x5f3759df1.00098
C2=0x5f3522671.00073
在测试范围内 , C2速度及精度略优 。
值得说明的是 , 对于更大的数的开平方运算是否更优 , 尚需要进一步设置测试程序验证 。
总体来说快速开平方时间上基本上无差别 , 相比c语言自身提供的函数 , 速度约提高5%左右 , 不知道c语言函数是否已经采用了快速开平方的运算方法 , 还没有仔细地去查看 。
参考代码如下:
#include
#include
#include
#include
float Q_rsqrt(float x)
{
long i;
float xhalf;
xhalf=x*0.5f;
i=*(long *)&x;
i=0x5f3759df-(i>>1); //原始常数
x=*(float *)&i;
x=x*(1.5f-(xhalf*x*x));
//x=x*(1.5f-(xhalf*x*x));
return 1.0f/x;
}
float Q_rsqrt_fast(float x)
{
long i;
float xhalf,y;
xhalf=x*0.5f;
i=*(long *)&x;
i=0x5f352267 -(i>>1); //本文常数
x=*(float *)&i;
x=x*(1.5f-(xhalf*x*x));
//x=x*(1.5f-(xhalf*x*x));
return 1.0f/x;
}
int main(int argc,char *argv[])
{
float ary0[300];
float ary1[300];
float ary2[300];
SYSTEMTIME t0;
GetSystemTime(&t0);
for(int j=0;j<10000;j++)
{
for(int i=1;i<=256;i++)
【c语言快速开平方常数的不完全优化报告】{
ary0[i-1]=Q_rsqrt(i+0.5);
}
}
SYSTEMTIME t1;
GetSystemTime(&t1);
for(int j=0;j<10000;j++)
{
for(int i=1;i<=256;i++)
{
ary1[i-1]=Q_rsqrt_fast(i+0.5);
}
}
SYSTEMTIME t2;
GetSystemTime(&t2);
for(int j=0;j<10000;j++)
{
for(int i=1;i<=256;i++)
{
ary2[i-1]=sqrtf(i+0.5);
}
}
SYSTEMTIME t3;
GetSystemTime(&t3);
printf("C1=0x5f3759df time1=%u C2=0x5f352267 time2=%u normalsqrtf time3=%un", t1.wSecond*1000+t1.wMilliseconds-t0.wMilliseconds-t0.wSecond*1000,
t2.wSecond*1000+t2.wMilliseconds-t1.wMilliseconds-t1.wSecond*1000,t3.wSecond*1000+t3.wMilliseconds-t2.wMilliseconds-t2.wSecond*1000);
float f1=0,f2=0;
for(int i=0;i<256;i++)
{
f1+=ary0[i]/ary2[i];
f2+=ary1[i]/ary2[i];
}
printf("C1=0x5f3759df p1=%.5f C2=0x5f352267 p2=%.5fn", f1/256.0,f2/256.0);
return 0;
}
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 竹子也可以开花和结果 竹子可以开花结果吗
- 这三大生肖的人生就像开了挂一样,这3大生肖的人生就像开了挂一样
- 手婚姻线是从哪里开始看,手相上如何看手相婚姻线
- 2018年生肖虎女命八大人群开运指南,女命属虎的人2018年八大人群开运指南
- 华:huā花与huá开花
- 黑米减肥粥的做法大全 怎样快速健康减肥
- 自制减肥茶做法 老中医快速减肥茶推荐
- 吃什么减肥最快最有效 最热门快速减肥食谱
- 减肥功效的茶有哪些快速消脂减肥的中药花茶
- 核桃太硬总是打不开 核桃太硬打不开怎么办