#include #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 double serie = 0.f; // criterio de comparacao long int termos = 0l; // contador de termos gerados float i=1.f; // i-esimo termo time(&tStart); time(&tActual); while(difftime(tActual, tStart) < TEMPOEXECUCAO){ serie = serie + InvSqrt(i++); termos++; time(&tActual); } printf("InvSqrt(x) :: [ %li ] Termos :: [ %Lf ] Serie\n", termos, serie); }