//$0x5f337b4a$算法的C语言实现与速度测试}
#include<stdio.h>
#include<time.h>
#include<stdio.h>
#define N 100000
#include<math.h>
float Q_tsqrt(float number)
{
long i;
float x2,y;
const float threehalfs=1.5F;
x2=number*0.5F;
y=number;
i=*(long *)&y;
//i=0x5f3759df-i/2;
i=0x5f337b4a-i/2;
//i=0x54a352a8-i/3;
y=*(float *)&i;
// y=y*(threehalfs-(x2*y*y));
// y = y * ( threehalfs - ( x2 * y * y ) );
// y = y * ( threehalfs - ( x2 * y * y ) );//
return y;
}
int main()
{
int k;
float j;
long double i;
clock_t start, finish;
double time;
start = clock();
for(k=0;k<N;k++){
j=1/Q_tsqrt(k);
printf("%f\n",j);
}
/*
for(k=0;k<N;k++){
j=sqrt(k);
printf("%f\n",j);
}
*/
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
//printf("i的值为%lf\n",i);
printf( "运行时间为\n%f 秒\n",time);//显示
return 0;
}
//牛顿迭代法开方
#include<stdio.h>
#include<time.h>
#include<stdio.h>
#define N 50000
#include<math.h>
float a[1000];
float newton_sqrt(int c){
int k=2;
a[0]=5.0;
a[1]=0.5*(a[0]+c/a[0]);
while(a[k]-a[k-1]<0.1){
a[k]=0.5*(a[k-1]+c/a[k-1]);
k++;
}
return a[k-1];
}
int main()
{
int k;
float j;
long double i;
clock_t start, finish;
double time;
start = clock();
for(k=0;k<N;k++){
j=newton_sqrt(k);
printf("%f\n",j);
}
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "运行时间为\n%f 秒\n",time);//显示
return 0;
}
//$sqrt()$速度测试
#include<stdio.h>
#include<time.h>
#include<stdio.h>
#define N 100
#include<math.h>
int main()
{
int k;
float j;
long double i;
clock_t start, finish;
double time;
start = clock();
for(k=0;k<N;k++){
j=sqrt(k);
printf("%f\n",j);
}
finish = clock();
time = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "运行时间为\n%f 秒\n",time);//显示
return 0;
}