ホームページ  >  記事  >  バックエンド開発  >  Python を使用して正確な 10 進数の計算を行うにはどうすればよいですか?

Python を使用して正確な 10 進数の計算を行うにはどうすればよいですか?

WBOY
WBOY転載
2023-08-23 15:53:082415ブラウズ

Python を使用して正確な 10 進数の計算を行うにはどうすればよいですか?

この記事では、Python で正確な 10 進数の計算を行う方法を学びます。

使用説明書

  • 10 進数モジュールの Decimal() 関数の使用

  • 数学モジュールの fsum() 関数を使用します

浮動小数点数がすべての 10 進数を正確に表現できないことはよく知られた欠点です。さらに、単純な数学的計算でも多少の誤差が生じる可能性があります。たとえば、-

###例###

次のプログラムは、浮動小数点整数がすべての 10 進数を正確に表現できないことを示しています-

リーリー ###出力###

上記のプログラムを実行すると、次の出力が生成されます -

リーリー

これらのエラーは、システムの基礎となる CPU とその浮動小数点ユニットで使用される IEEE 754 算術標準の「機能」です。 float インスタンスを使用してコードを作成する場合、Python の float データ型はネイティブ表現を使用してデータを保持するため、このようなエラーを防ぐためにできることは何もありません。

10 進数モジュール

を使用すると、パフォーマンスが多少犠牲になりますが、精度が向上します。以下で見てみましょう。

方法 1: 10 進数モジュールの Decimal() 関数を使用する ###例### 次のプログラムは、Decimal() 関数を使用して正確な 10 進数を計算する例を示しています。 リーリー ###出力###

上記のプログラムを実行すると、次の出力が生成されます -

リーリー

上記のコードでは、数値が文字列として指定されていることに最初は少し奇妙に感じるかもしれません。ただし、10 進数オブジェクトは期待どおりに機能します (すべての一般的な数学演算がサポートされているなど)。これらを印刷したり、文字列書式設定関数で使用したりすると、通常の数値のように見えます。

桁数や丸め方法など、計算のさまざまな側面を制御することは、

decmal

の重要な機能です。

###例###

これを行うには、ローカル コンテキストを作成し、その設定を変更します。

リーリー ###出力###

上記のプログラムを実行すると、次の出力が生成されます -

リーリー

精度を向上させるには、精度の値を「60」に増やします

###例### リーリー ###出力### 上記のプログラムを実行すると、次の出力が生成されます - リーリー

方法 2: 数学モジュールの fsum() 関数を使用する

10 進数モジュールは、IBM の「Universal Decimal Arithmetic 仕様」を実装しています。

言うまでもなく、この記事の範囲を超えたカスタマイズ オプションが多数あります。

Python 初心者は、浮動小数点データ型の精度の問題を解決するために 10 進数モジュールを使用したくなるかもしれません。ただし、アプリケーション分野を理解する必要もあります。通常、通常の浮動小数点タイプは、科学または工学の問題、コンピュータ グラフィックス、またはその他の科学的な性質のものを扱う場合によく使用されます。

たとえば、実世界では、浮動小数点数によって提供される

17 桁の精度

で測定できる要素はほとんどありません。したがって、小さな計算誤差があっても影響はありません。さらに、

ネイティブ浮動小数点

は大幅に

高速です。これは、多数の計算を実行する必要がある状況では非常に重要です。

###例###

ただし、間違いを完全に避けることはできません。多くのアルゴリズムは数学者によって広く研究されており、一部のアルゴリズムは他のアルゴリズムよりもエラーの処理に優れています。さらに、キャンセルの減算や大小の数値の加算を行うと結果が生じる可能性があるため、注意が必要です。

リーリー ###出力###

上記のプログラムを実行すると、次の出力が生成されます -

リーリー

fsum() 関数は、指定された範囲または反復可能なオブジェクト間の合計を見つけるために使用されます。数学ライブラリをインポートする必要があります。数学的な計算で広く使用されています。

###文法###

以下は関数の構文です。

リーリー

反復可能なオブジェクトは範囲、配列、またはリストです。

戻り値の型 - 浮動小数点数を返します。 ###例### 次の例は、

math.fsum()

-

でのより正確な実装に使用できます。 リーリー ###出力###

上記のプログラムを実行すると、次の出力が生成されます -

リーリー

対照的に、他のアルゴリズムのエラー伝播特性を実際に研究して理解する必要があります。

それでも、金融などのトピックを扱うプログラムでは、10 進数モジュールが最もよく使用されます。これらのシステムの計算に小さな誤差が現れると、非常に不快なものになります。

したがって、10 進数モジュールは、この状況を回避する方法を提供します。 Python がデータベースと対話するとき、特に財務データにアクセスするときに、Decimal オブジェクトが再び発生することがよくあります。

###結論は###

この記事では、特定の状況下では通常の計算が失敗するため、正しい 10 進数の計算が必要であることを学びました。 2 つの別個の関数、decmal() と fsum() を使用して正確な 10 進数の計算を実行する方法を学びました。また、 localcontext() 関数を使用して結果の精度を設定する方法も学びました。

以上がPython を使用して正確な 10 進数の計算を行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。