さまざまな精度で円周率を計算し、数値と経過時間を出力するプログラムを作成しようとしています。毎回現在の精度で結果を印刷したい。現在の浮動小数点精度はprint('pi = %*f'%(i, pi))
どこにi
あるかを使用しました。これにより、プログラムは数値を10進数のiに切り上げました。同じアルゴリズムを実行しているが、出力を次のように変更した結果を示す画像を添付しています。
print (" pi = ", pi, " =with ", i-1, " decimal points accuracy= in: ", (-1)*t, "sec")
に:
print (" pi = %.*f"%(i, pi), " =with ", i-1, " decimal points accuracy= in: ", (-1)*t, "sec")
これは私の完全なコードです:
import time
accuracy = 4
for i in range(1,accuracy + 1):
pi = 0
prevPi = 1
x = 0
t = time.time()
while abs((pi * 4) - prevPi) > 10**((-1)*(i+1)):
#while x < lim:
prevPi = pi * 4
pi += (((-1)**(x))/(1+(2*x)))
#print(abs((pi * 4) - prevPi))
x += 1
pi *= 4
t -= time.time()
print (" pi = %.*f"%(i, pi), " =with ", i-1, " decimal points accuracy= in: ", (-1)*t, "sec")
四捨五入せずに10進数のiで数値を出力するにはどうすればよいですか?
数値を切り捨てる関数を定義することで、問題に取り組むことができます。その関数は2つの引数を取ることができます:
number
切り捨てたいもの、position
、次のすべての値を削除します。def truncate(number, position):
'''Return number with dropped decimal places past specified position.'''
return number - number%(10**position)
たとえば、番号3.14を3.1に切り捨てたい場合は、次のように呼び出す必要があります。
truncate(3.14, -1)
また、コードを変更して、よりシンプルになり、PEP8のコーディング規則に一致するようにしました。したがって、変数の命名が明確になり、コードのフォーマットが改善されました。
#!/usr/bin/env python3
'''Module for different pi accuracies calculation time comparison.'''
from time import time
def truncate(number, position):
'''Return number with dropped decimal places past specified position.'''
return number - number%(10**position)
def calculate_pi(accuracy):
'''Return pi with certain floating point accuracy.'''
previous_pi = 0
current_pi = 4
iterator = 1
while abs(current_pi - previous_pi) > 10 ** (accuracy-1):
previous_pi = current_pi
current_pi += 4 * ((-1)**iterator) / (1+(2*iterator))
iterator += 1
return truncate(current_pi, accuracy)
def calculation_speed_comparison(max_accuracy):
'''Print comparison of different accuracy pi calculation time.'''
for current_accuracy in range(max_accuracy+1):
calculation_time = time()
current_pi = calculate_pi(-current_accuracy)
calculation_time -= time()
print('pi = {} with {} decimal points accuracy in {} seconds.'.format(
current_pi, current_accuracy, -calculation_time))
calculation_speed_comparison(4)
このコードへの出力は、元のコードと非常によく似ています。
pi = 3.0 with 0 decimal points accuracy in 3.266334533691406e-05 seconds.
pi = 3.1 with 1 decimal points accuracy in 0.00016045570373535156 seconds.
pi = 3.14 with 2 decimal points accuracy in 0.0014882087707519531 seconds.
pi = 3.141 with 3 decimal points accuracy in 0.01430201530456543 seconds.
pi = 3.1415 with 4 decimal points accuracy in 0.1466822624206543 seconds.
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加