ホームページ > バックエンド開発 > Python チュートリアル > Python で浮動小数点エラーを軽減するにはどうすればよいですか?

Python で浮動小数点エラーを軽減するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-21 15:08:30
オリジナル
959 人が閲覧しました

How to Mitigate Floating Point Errors in Python?

Python での浮動小数点エラーの回避

プログラミングの領域では、浮動小数点計算の複雑さを可能な限り理解することが不可欠です。適切に処理しないと、予期しないエラーが発生する可能性があります。この記事では、浮動小数点演算の落とし穴を浮き彫りにする実践的な例について説明します。

平方根問題

平方根を近似するように設計された Python 関数を考えてみましょう。

<code class="python">def sqrt(num):
    root = 0.0
    while root * root < num:
        root += 0.01
    return root
ログイン後にコピー

この関数を使用すると、驚くべき結果が得られます。

>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998</code>
ログイン後にコピー

これらの不正確さは浮動小数点演算によって説明されます。小数を表す場合、コンピュータは小数を整数と指数の組み合わせとして保存します。この表現には制限があるため、特定の 10 進数値は正確に表現できず、近似値が生じます。

エラーについて

上記のコードでは、問題はルート値を増やすために使用される増分。値 0.01 を追加するつもりですが、浮動小数点レジスタに格納されている実際の値はわずかに異なり、0.01 より大きくなります。

エラーへの対処

回避するには浮動小数点エラーについては、さまざまなアプローチを使用できます:

  • Decimal モジュールの使用:
    Python の Decimal モジュールは、より正確な 10 進演算を提供します。コード内で float を Decimal に置き換えることで、より正確な結果が得られます。
<code class="python">from decimal import Decimal as D

def sqrt(num):
    root = D(0)
    while root * root < num:
        root += D("0.01")
    return root
ログイン後にコピー
Now, the function returns precise results, such as:

```
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
```
</code>
ログイン後にコピー
  • 非浮動小数点インクリメントの使用:
    If Decimal モジュールを使用することはオプションではありません。別の方法は、1/2**J など、バイナリで正確に表現できる浮動小数点値を使用することです。これにはより複雑なコードが必要ですが、正確な増分が保証されます。
  • 数値解析テクニックの採用:
    数値解析は、複雑な数学的計算を処理するための特殊な方法を提供します。ニュートン法のような手法を使用すると、正確な平方根近似を行うことができます。

以上がPython で浮動小数点エラーを軽減するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート