Advertisement
Guest User

pi-1.cpp

a guest
Feb 19th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. #include <array> // array
  2. #include <cstdio> // printf
  3. #include <cmath> // floor
  4. #include <cppcoro/generator.hpp>
  5.  
  6. cppcoro::generator<double> gen()
  7. {
  8. auto [q, r, t, k, n, l] = std::array<double,6>
  9. {1, 0, 1, 1, 3, 3};
  10. for ( ; ; ) {
  11. if (4*q+r-t < n*t) {
  12. co_yield n;
  13. auto nr = 10*(r-n*t);
  14. n = floor( (10*(3*q+r))/t )-10*n;
  15. q *= 10;
  16. r = nr;
  17. }
  18. else {
  19. auto nr = (2*q+r)*l;
  20. auto nn = floor( (q*(7*k)+2+(r*l))/(t*l) );
  21. q *= k;
  22. t *= l;
  23. l += 2;
  24. k += 1;
  25. n = nn;
  26. r = nr;
  27. }
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. auto digit_limit = 45;
  34. for (auto digit : gen() ) {
  35. printf("%.0lf", digit);
  36. if (--digit_limit) { continue; } else { break; }
  37. }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement