Pythonで浮動小数点の精度を動的に変更する

フランクF。

さまざまな精度で円周率を計算し、数値と経過時間を出力するプログラムを作成しようとしています。毎回現在の精度で結果を印刷したい。現在の浮動小数点精度は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で数値を出力するにはどうすればよいですか?

Lycopersicum

数値を切り捨てる関数を定義することで、問題に取り組むことができます。その関数は2つの引数を取ることができます:

  1. number 切り捨てたいもの、
  2. 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]

編集
0

コメントを追加

0

関連記事

分類Dev

python : Unicodeを小数精度で浮動小数点に変換する

分類Dev

ROUND_HALF_UPを任意精度で浮動小数点にするPythonの方法

分類Dev

倍精度数を浮動小数点数に変換する

分類Dev

Pythonで文字列を浮動小数点に変換する

分類Dev

Pythonで浮動小数点精度を制御する

分類Dev

半精度浮動小数点数(バイト)をSwiftで浮動小数点数に変換します

分類Dev

OCamlで浮動小数点の精度を取得する

分類Dev

Pythonで2つの精度で浮動小数点乱数を生成する方法

分類Dev

小数の精度を変更し、浮動小数点数の丸めをキャンセルするにはどうすればよいですか?

分類Dev

浮動小数点値を小数点なしで文字列に変換する

分類Dev

単精度浮動小数点を半精度浮動小数点に変換します

分類Dev

QTableWidgetのセルの浮動小数点数の精度を変更するにはどうすればよいですか?

分類Dev

浮動小数点を文字列に変換し、精度と小数点以下の桁数を指定しますか?

分類Dev

Rubyで浮動小数点16進数を浮動小数点に変換する

分類Dev

VisualStudioでFFTWで単精度浮動小数点を使用する

分類Dev

Rustで浮動小数点を整数に変換する

分類Dev

Rustで浮動小数点を整数に変換する

分類Dev

Rustで浮動小数点を整数に変換する

分類Dev

LINQで文字列を浮動小数点に変換する

分類Dev

c#floatをIEEE単精度浮動小数点バイトに変換する

分類Dev

Javascriptで浮動小数点の小数点記号をドットからコンマに変換する方法

分類Dev

GDBで浮動小数点精度を指定する

分類Dev

JavaScriptで浮動小数点精度を制限する

分類Dev

浮動小数点の精度を失うことなく、浮動小数点を整数に保存します

分類Dev

Pythonで浮動小数点を整数に変換する最も安全な方法は?

分類Dev

Pythonで16進値を浮動小数点数に変換する方法

分類Dev

Pythonの倍精度浮動小数点値?

分類Dev

printfを使用せずにcで浮動小数点精度を制限する

分類Dev

Pythonで非常に奇妙な動作をする浮動小数点から整数への変換

Related 関連記事

  1. 1

    python : Unicodeを小数精度で浮動小数点に変換する

  2. 2

    ROUND_HALF_UPを任意精度で浮動小数点にするPythonの方法

  3. 3

    倍精度数を浮動小数点数に変換する

  4. 4

    Pythonで文字列を浮動小数点に変換する

  5. 5

    Pythonで浮動小数点精度を制御する

  6. 6

    半精度浮動小数点数(バイト)をSwiftで浮動小数点数に変換します

  7. 7

    OCamlで浮動小数点の精度を取得する

  8. 8

    Pythonで2つの精度で浮動小数点乱数を生成する方法

  9. 9

    小数の精度を変更し、浮動小数点数の丸めをキャンセルするにはどうすればよいですか?

  10. 10

    浮動小数点値を小数点なしで文字列に変換する

  11. 11

    単精度浮動小数点を半精度浮動小数点に変換します

  12. 12

    QTableWidgetのセルの浮動小数点数の精度を変更するにはどうすればよいですか?

  13. 13

    浮動小数点を文字列に変換し、精度と小数点以下の桁数を指定しますか?

  14. 14

    Rubyで浮動小数点16進数を浮動小数点に変換する

  15. 15

    VisualStudioでFFTWで単精度浮動小数点を使用する

  16. 16

    Rustで浮動小数点を整数に変換する

  17. 17

    Rustで浮動小数点を整数に変換する

  18. 18

    Rustで浮動小数点を整数に変換する

  19. 19

    LINQで文字列を浮動小数点に変換する

  20. 20

    c#floatをIEEE単精度浮動小数点バイトに変換する

  21. 21

    Javascriptで浮動小数点の小数点記号をドットからコンマに変換する方法

  22. 22

    GDBで浮動小数点精度を指定する

  23. 23

    JavaScriptで浮動小数点精度を制限する

  24. 24

    浮動小数点の精度を失うことなく、浮動小数点を整数に保存します

  25. 25

    Pythonで浮動小数点を整数に変換する最も安全な方法は?

  26. 26

    Pythonで16進値を浮動小数点数に変換する方法

  27. 27

    Pythonの倍精度浮動小数点値?

  28. 28

    printfを使用せずにcで浮動小数点精度を制限する

  29. 29

    Pythonで非常に奇妙な動作をする浮動小数点から整数への変換

ホットタグ

アーカイブ