Advertisement
jukaukor

BorweinPlouffePiHe.py

Mar 14th, 2021
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. # Computing nth hex digit of Pi with BBP formula.
  2. # Bailey-Borwein-Plouffe_formula for Pi
  3. # Juhani Kaukoranta 14.3.2021
  4.  
  5. import math,time
  6.  
  7. # Convert Pi to Hex-strings
  8. # (float number's decimals to hex digits)
  9.  
  10. def convHex(x) :
  11. hx = "0123456789ABCDEF"
  12. y = math.fabs(x)
  13. chx =''
  14. for i in range(0,16):
  15. y = 16.0 * (y - math.floor(y))
  16. chx += hx[int(y)]
  17. return chx
  18.  
  19. def Sums(j):
  20. s = 0.0
  21. # t // Each term of right summation
  22. # r // Denominator
  23. # k // Loop index
  24. # EPS = Loop-exit accuration of the right summation
  25.  
  26. EPS = 1.0e-17
  27. # Left Sum (0 ... n)
  28. k = 0
  29. for k in range(0,n+1):
  30. r = 8 * k + j
  31. t = pow(16,n-k,r)
  32. t /= r
  33. s += t - int(t)
  34. s -= int(s)
  35.  
  36. #Right sum (n + 1 ...)
  37. k = n+1
  38. while (1) :
  39. r = 8 * k + j
  40. t = 16**(n - k)
  41. t /= r
  42. if (t < EPS):
  43. break
  44. s += t
  45. s -= int(s)
  46. k += 1
  47.  
  48. return s # left + right
  49.  
  50. # paaohjelma kysyy halutun hex-muotoisen desimaalin järjestysnumeroa
  51. # tulostaa sen ja laskennassa käytetyn desimaalimuotoisen fraktion
  52. # sekä 10 hex-muotoista desimaalia
  53.  
  54. n = int(input("kuinka mones Piin heksadesimaali halutaan laskea? "))
  55. print("**** PI Computation ( hex digit number: ", n,", waiting..." )
  56. # Compute PI
  57. n = n - 1
  58. t0 = time.perf_counter() # time start
  59. pi = 4 * Sums(1) - 2 * Sums(4) - Sums(5) - Sums(6)
  60. pi = pi - int(pi) + 1
  61. pi_hex = convHex(pi)
  62. print("Hex digit: ", pi_hex[0])
  63. print("FRACTION : ", pi)
  64. print("10 HEX DIGITS: ",pi_hex[0:10])
  65. t1 = time.perf_counter() # time end
  66. print("Aikaa kului ", t1 - t0," sekuntia")
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement