#include #include #define C const typedef double R; typedef unsigned long int ul; typedef union{R r; ul i;} U; static R rf(){return 0x1.p-31*random() + 0x1.p-62*random();} static R l2R(ul x){return ((U)x).r;} static ul R2l(R x){return ((U)x).i;} static ul j(short h, ul a){return (ul)h<<52 | (a & ((1L<<52)-1));} R fdiv(C R n, C R d){C ul a = R2l(n), b = R2l(d); C ul nf = j(1, a), df = j(1, b); C char ad = nf < df; C short N = (1<<20)/((df>>42)+1); // table lookup! M=8, z=2 C ul Nd = N*df; ul r = (N*nf)<=0) {C short nq = r>>54; r = (r<<8) - Nd*nq; q = (q<<8)+nq; rb -= 8;} while(r >= Nd){r -= Nd; ++q;} return l2R(j(1023 + (a>>52) - (b>>52) - ad, ((q>>-rb)+1)>>1));} void t(R a, R b) {if (a/b != fdiv(a, b)) exit(printf("%20.17f %20.17f\n", a, b));} int main(){for(int r=0; r<100000000; ++r) t(rf(), rf()); printf("😊\n"); return 0;}