int main() { FLOAT a = computeT(10, f2F(-1.0), f2F(1.0), f); FLOAT ans = f2F(0.551222); nemu_assert(Fabs(a - ans) < f2F(1e-4)); HIT_GOOD_TRAP; return 0; }
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; }
int main() { // nemu_assert(int2F(1) + F_mul_int(F_mul_F(f2F(-0.8),f2F(-0.8)),25) > int2F(16.9)); // nemu_assert(int2F(1) + F_mul_int(F_mul_F(f2F(-0.8),f2F(-0.8)),25) < int2F(17)); // nemu_assert(); // nemu_assert(F_div_F(int2F(1) , int2F(1) + F_mul_int(F_mul_F(f2F(-0.8),f2F(-0.8)),25)) > f2F(0)); // nemu_assert(F_div_F(int2F(1) , f2F(17)) > f2F(0.05)); /* nemu_assert(F_div_int(int2F(2),10) <= f2F(0.2)); nemu_assert(F_div_int(int2F(2),10) > f2F(0.1999)); nemu_assert(F_mul_F(f2F(1.0),int2F(25)) == f2F(25)); nemu_assert(f(int2F(1)) < f2F(0.039)); nemu_assert(F_mul_int(f2F(0.2),9 ) > f2F(1.7));*/ // nemu_assert(F_mul_F(f2F(-0.8),f2F(-0.8)) == f2F(0.64)); // nemu_assert(F_div_F(0x10000,0x10ffcd) == int2F(0)); // nemu_assert(f(-0.8) > f2F(0.05)); // nemu_assert(F_mul_F(f2F(0.8),f2F(0.8)) < f2F(0.64)); // nemu_assert(f(f2F(0.8)) > f2F(0.05)); // nemu_assert(f(f2F(0.8)) < f2F(0.06)); // nemu_assert(F_mul_F(f2F(-0.2),f2F(-0.2)) == f2F(0.04)); // nemu_assert(f(f2F(-0.2)) == int2F(0)); // nemu_assert(f2F(-1.0) + F_mul_int(f2F(0.2),9) < f2F(0.9)); // nemu_assert(f(f2F(-1.0) + F_mul_int(f2F(0.2), 9)) > f2F(0.03)); // nemu_assert(f2F(0.2) == 0x3333); // nemu_assert(F_mul_F(f2F(2.756),f2F(0.2)) > f2F(0.55)); // nemu_assert(F_mul_F(f2F(2.756),f2F(0.2)) < f2F(0.5515)); // nemu_assert( < f2F(0.05)); // nemu_assert(f(1.8)<f2F(0.040)); FLOAT a = computeT(10, f2F(-1.0), f2F(1.0), f); // nemu_assert(a > int2F(1)); FLOAT ans = f2F(0.551222); nemu_assert(Fabs(a - ans) < f2F(1e-4)); // nemu_assert(a < f2F(0.019)); // FLOAT ans = f2F(2.756); //nemu_assert(a <= ans); // nemu_assert(a > f2F(0.1)); // nemu_assert(Fabs(a - ans) < f2F(1e-4)); HIT_GOOD_TRAP; return 0; }
/* 逻辑时钟前进1单位 */ void update_letter_pos(void) { fly_t it; for (it = head; it != NULL; ) { fly_t next = it->_next; it->x += it->v; /* 根据速度更新位置 */ if (it->x < 0 || it->x + f2F(7.9) > int2F(SCR_HEIGHT)) { if (it->x < 0) hit ++; /* 从上部飞出屏幕 */ else miss ++; /* 从下部飞出屏幕 */ fly_remove(it); fly_free(it); if (it == head) head = next; /* 更新链表 */ } it = next; } }
/* 在屏幕上创建一个新的字母 */ 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); /* 清除过往的按键 */ }
int main(){ /* for(c=-(0x8000);c<0x8000;++c){ nemu_assert(c==(F2int(int2F(c)))); } set_bp(); f = 2.0; unsigned int u = *(unsigned int *)&f; nemu_assert(u>0); set_bp(); */ a = f2F(20000.0); nemu_assert((int2F(20000)-a)<5); set_bp(); b = F2int(a); nemu_assert(2==b); HIT_GOOD_TRAP; return 0; }