float sqrtfcn(float val) { float x = val/10; float dx; double diff; double min_tol = 0.00001; int i, flag; flag = 0; if (val == 0 ) x = 0; else { for (i=1;i<20;i++) { if (!flag) { dx = (val - (x*x)) / (2.0 * x); x = x + dx; diff = val - (x*x); if (fabs1(diff) <= min_tol) flag = 1; } else {} /* JG */ /* x =x; */ } } return (x); }
int main(void) { #ifdef _MSC_VER NAN /= ZERO; INFINITY /= ZERO; #endif printf("abs1(%f) = %f\n", NAN, fabs1(NAN)); printf("abs2(%f) = %f\n", NAN, fabs2(NAN)); printf("abs1(%f) = %f\n", 1.0, fabs1(1.0)); printf("abs2(%f) = %f\n", 1.0, fabs2(1.0)); printf("abs1(%f) = %f\n", -1.0, fabs1(-1.0)); printf("abs2(%f) = %f\n", -1.0, fabs2(-1.0)); printf("abs1(%f) = %f\n", INFINITY, fabs1(INFINITY)); printf("abs2(%f) = %f\n", INFINITY, fabs2(INFINITY)); printf("abs1(%f) = %f\n", -INFINITY, fabs1(-INFINITY)); printf("abs2(%f) = %f\n", -INFINITY, fabs2(-INFINITY)); return 0; }