#include #include const double TEMPOEXECUCAO = 300; union casting { int i; float f; }; float InvSqrt (float x) { union casting cast; float xhalf = 0.5f*x; cast.f = x; // int i = *(int*)&x; cast.i = 0x5f3759df - ((cast.i)>>1); // x = *(float*)&i; return cast.f*(1.5f - xhalf*cast.f*cast.f); // x = x*(1.5f - xhalf*x*x); } int main(void){ time_t tStart, tActual; long int termosPorSegundo = 0l; // contador de termos gerados float i=1.f; // i-esimo termo double t1,t2; time(&tStart); time(&tActual); t1 = difftime(tActual, tStart); t2 = t1; printf("Tempo versus Termos Criados.\n"); while(t1 < TEMPOEXECUCAO){ InvSqrt(i++); if((int)t2 == (int)(t1+1)){ printf("%0.0f\t%ld\n",t1,termosPorSegundo); termosPorSegundo = 0; t1 = difftime(tActual, tStart); t2 = t1; }else{ termosPorSegundo++; t2 = difftime(tActual, tStart); } time(&tActual); } }