#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N_TRY 70000
#define SEED 20201028
#define DEPTH 4
#define PI 3.1415926535897932384626433832795028841971693993L
long double randld(void) {
long double ldr = 0., ldt = 0.;
for(int i = 0; i < DEPTH ;i ++) {
ldr /= ((long double)RAND_MAX + 1.);
ldt /= ((long double)RAND_MAX + 1.);
}
if( ldr == (long double)0. ) { ldr = 0.; } else { ldr = sqrtl(-2 * logl(ldr)); }
return ldr * sinl(PI * ldt);
}
int main(void) {
int c1 = 0, c2 = 0;
for(int i = 0; i < N_TRY ;i ++) {
long double xl = randld(), yl = randld();
double xd = xl, yd =yl;
double h0 = ( xl == 0. || yl == 0. ? 0. : 2. / (1. / xl + 1. / yl));
double h1 = ( xd == 0. || yd == 0. ? 0. : 2. / (1. / xd + 1. / yd));
double h2 = ( xd == 0. || yd == 0. ? 0. : 2. * xd * yd / (xd + yd));
if( h0 != h1 ) { c1 ++; }
if( h0 != h2 ) { c2 ++; }
}
printf("err ratio of test1: %10.7f%%\n", c1
* 100 / (double)N_TRY
); printf("err ratio of test2: %10.7f%%\n", c2
* 100 / (double)N_TRY
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KCiNkZWZpbmUgTl9UUlkJNzAwMDAKI2RlZmluZSBTRUVECTIwMjAxMDI4CgojZGVmaW5lIERFUFRICTQKI2RlZmluZSBQSQkJMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4ODQxOTcxNjkzOTkzTAoKbG9uZyBkb3VibGUgcmFuZGxkKHZvaWQpIHsKCWxvbmcgZG91YmxlIGxkciA9IDAuLCBsZHQgPSAwLjsKCWZvcihpbnQgaSA9IDA7IGkgPCBERVBUSCA7aSArKykgewoJCWxkciArPSByYW5kKCk7CgkJbGRyIC89ICgobG9uZyBkb3VibGUpUkFORF9NQVggKyAxLik7CgkJbGR0ICs9IHJhbmQoKTsKCQlsZHQgLz0gKChsb25nIGRvdWJsZSlSQU5EX01BWCArIDEuKTsKCX0KCWlmKCBsZHIgPT0gKGxvbmcgZG91YmxlKTAuICkgeyBsZHIgPSAwLjsgfSBlbHNlIHsgbGRyID0gc3FydGwoLTIgKiBsb2dsKGxkcikpOyB9CglyZXR1cm4gbGRyICogc2lubChQSSAqIGxkdCk7Cn0KCmludCBtYWluKHZvaWQpIHsKCXNyYW5kKFNFRUQpOwoJaW50IGMxID0gMCwgYzIgPSAwOwoJZm9yKGludCBpID0gMDsgaSA8IE5fVFJZIDtpICsrKSB7CgkJbG9uZyBkb3VibGUgeGwgPSByYW5kbGQoKSwgeWwgPSByYW5kbGQoKTsKCQlkb3VibGUJCXhkID0geGwsIHlkID15bDsKCQlkb3VibGUJCWgwID0gKCB4bCA9PSAwLiB8fCB5bCA9PSAwLiA/IDAuIDogMi4gLyAoMS4gLyB4bCArIDEuIC8geWwpKTsKCQlkb3VibGUJCWgxID0gKCB4ZCA9PSAwLiB8fCB5ZCA9PSAwLiA/IDAuIDogMi4gLyAoMS4gLyB4ZCArIDEuIC8geWQpKTsKCQlkb3VibGUJCWgyID0gKCB4ZCA9PSAwLiB8fCB5ZCA9PSAwLiA/IDAuIDogMi4gKiB4ZCAqIHlkIC8gKHhkICsgeWQpKTsKCQlpZiggaDAgIT0gaDEgKSB7IGMxICsrOyB9CgkJaWYoIGgwICE9IGgyICkgeyBjMiArKzsgfQoJfQoJcHJpbnRmKCJlcnIgcmF0aW8gb2YgdGVzdDE6ICUxMC43ZiUlXG4iLCBjMSAqIDEwMCAvIChkb3VibGUpTl9UUlkpOwoJcHJpbnRmKCJlcnIgcmF0aW8gb2YgdGVzdDI6ICUxMC43ZiUlXG4iLCBjMiAqIDEwMCAvIChkb3VibGUpTl9UUlkpOwoJcmV0dXJuIDA7Cn0K