fork(1) download
  1. import numpy as np
  2.  
  3. #なんたらのアルゴリズム。いっぱい繰り返す
  4. def GaussRegendre(N):
  5. #初項
  6. a = 1.0
  7. b = np.sqrt(2) / 2
  8. t = 1 / 4
  9. p = 1
  10.  
  11. for i in range(N): #←コレ、iが0からN-1までの間以下を繰り返すらしいですよ?
  12.  
  13. #漸化式(?)に従い、次の項を計算
  14. a_new = (a + b) / 2
  15. b_new = np.sqrt(a * b)
  16. t_new = t - p * (a - a_new)**2
  17. p_new = 2 * p
  18.  
  19. #古い値を新しい値に置き換え
  20. a = a_new
  21. b = b_new
  22. t = t_new
  23. p = p_new
  24.  
  25. pi = (a + b)**2 / (4 * t) #円周率の計算(ここすき)
  26. return pi
  27.  
  28. #出力
  29. print("GaussRegendre(1) = " + str(GaussRegendre(1)))
  30. print("GaussRegendre(2) = " + str(GaussRegendre(2)))
  31. print("GaussRegendre(3) = " + str(GaussRegendre(3)))
Success #stdin #stdout 0.15s 28448KB
stdin
Standard input is empty
stdout
GaussRegendre(1) = 3.1405792505221686
GaussRegendre(2) = 3.141592646213543
GaussRegendre(3) = 3.141592653589794