FLOAT sqrt(FLOAT x) { FLOAT dt, t = int2F(2); do { dt = F_div_int((F_div_F(x, t) - t), 2); t += dt; } while(Fabs(dt) > f2F(1e-4)); return t; }
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; }
/* 在屏幕上创建一个新的字母 */ void create_new_letter(void) { if (head == NULL) { head = fly_new(); /* 当前没有任何字母,创建新链表 */ } else { fly_t now = fly_new(); fly_insert(NULL, head, now); /* 插入到链表的头部 */ head = now; } /* 字母、初始位置、掉落速度均为随机设定 */ head->x = 0; head->y = rand() % (SCR_WIDTH / 8 - 2) * 8 + 8; head->v = F_div_F(int2F(rand() % 1000), int2F(2000)) + f2F(0.5); head->text = rand() % 26; release_key(head->text); /* 清除过往的按键 */ }
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 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)); }