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

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

Oct 21, 2024 pm 03:08 PM

How to Mitigate Floating Point Errors in Python?

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

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

平方根問題

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

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

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

&gt;&gt;&gt; sqrt(4)
2.0000000000000013
&gt;&gt;&gt; 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 &lt; num:
        root += D(&quot;0.01&quot;)
    return root
ログイン後にコピー
Now, the function returns precise results, such as:

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

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonを使用してPDFドキュメントの操作方法 Pythonを使用してPDFドキュメントの操作方法 Mar 02, 2025 am 09:54 AM

Pythonを使用してPDFドキュメントの操作方法

DjangoアプリケーションでRedisを使用してキャッシュする方法 DjangoアプリケーションでRedisを使用してキャッシュする方法 Mar 02, 2025 am 10:10 AM

DjangoアプリケーションでRedisを使用してキャッシュする方法

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

Pythonオブジェクトのシリアル化と脱介入:パート1 Pythonオブジェクトのシリアル化と脱介入:パート1 Mar 08, 2025 am 09:39 AM

Pythonオブジェクトのシリアル化と脱介入:パート1

Pythonで独自のデータ構造を実装する方法 Pythonで独自のデータ構造を実装する方法 Mar 03, 2025 am 09:28 AM

Pythonで独自のデータ構造を実装する方法

See all articles