fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define N_TRY 70000
  6. #define SEED 20201028
  7.  
  8. #define DEPTH 4
  9. #define PI 3.1415926535897932384626433832795028841971693993L
  10.  
  11. long double randld(void) {
  12. long double ldr = 0., ldt = 0.;
  13. for(int i = 0; i < DEPTH ;i ++) {
  14. ldr += rand();
  15. ldr /= ((long double)RAND_MAX + 1.);
  16. ldt += rand();
  17. ldt /= ((long double)RAND_MAX + 1.);
  18. }
  19. if( ldr == (long double)0. ) { ldr = 0.; } else { ldr = sqrtl(-2 * logl(ldr)); }
  20. return ldr * sinl(PI * ldt);
  21. }
  22.  
  23. int main(void) {
  24. srand(SEED);
  25. int c1 = 0, c2 = 0;
  26. for(int i = 0; i < N_TRY ;i ++) {
  27. long double xl = randld(), yl = randld();
  28. double xd = xl, yd =yl;
  29. double h0 = ( xl == 0. || yl == 0. ? 0. : 2. / (1. / xl + 1. / yl));
  30. double h1 = ( xd == 0. || yd == 0. ? 0. : 2. / (1. / xd + 1. / yd));
  31. double h2 = ( xd == 0. || yd == 0. ? 0. : 2. * xd * yd / (xd + yd));
  32. if( h0 != h1 ) { c1 ++; }
  33. if( h0 != h2 ) { c2 ++; }
  34. }
  35. printf("err ratio of test1: %10.7f%%\n", c1 * 100 / (double)N_TRY);
  36. printf("err ratio of test2: %10.7f%%\n", c2 * 100 / (double)N_TRY);
  37. return 0;
  38. }
  39.  
Success #stdin #stdout 0.04s 4316KB
stdin
Standard input is empty
stdout
err ratio of test1: 38.5385714%
err ratio of test2: 40.4385714%