FLOAT computeT(int n, FLOAT a, FLOAT b, FLOAT (*fun)(FLOAT)) { int k; FLOAT s,h; h = F_div_int((b - a), n); s = F_div_int(fun(a) + fun(b), 2 ); for(k = 1; k < n; k ++) { s += fun(a + F_mul_int(h, k)); } s = F_mul_F(s, h); return s; }
FLOAT pow(FLOAT x, FLOAT y) { /* we only compute x^0.333 */ FLOAT t2, dt, t = int2F(2); do { t2 = F_mul_F(t, t); dt = (F_div_F(x, t2) - t) / 3; t += dt; } while(Fabs(dt) > f2F(1e-4)); return t; }
FLOAT f(FLOAT x) { return F_div_F(int2F(1),int2F(1) + F_mul_int(F_mul_F(x,x),25)); /* f(x) = 1/(1+25x^2) */ /* FLOAT a = int2F(1); FLOAT b = F_mul_F(x,x); FLOAT c = F_mul_int(b ,25); FLOAT d = int2F(1) + c;*/ // nemu_assert(x == f2F(0.8)); // nemu_assert(b < f2F(0)); /* a ++ ; a -- ; b ++ ; b -- ; c ++ ; c -- ; d ++ ; d -- ; return F_div_F(a,d);*/ }
FLOAT computeT(int n, FLOAT a, FLOAT b, FLOAT (*fun)(FLOAT)) { int k; FLOAT s,h; h = F_div_int((b - a), n); s = F_div_int(fun(a) + fun(b), 2 ); for(k = 1; k < n; k ++) { s += fun(a + F_mul_int(h, k)); } s = F_mul_F(s, h); return s; /* FLOAT m1=f2F(0.1); //FLOAT m2=f2F(); m1=fun(m1); FLOAT ans=f2F(0.8); ans=Fabs(ans-m1); nemu_assert(ans<=f2F(1e-4)); return 0; */ }
FLOAT f(FLOAT x) { /* f(x) = 1/(1+25x^2) */ return F_div_F(int2F(1), int2F(1) + F_mul_int(F_mul_F(x, x), 25)); }