Python での浮動小数点エラーの回避
プログラミングの領域では、浮動小数点計算の複雑さを理解することが不可欠です。適切に処理しないと予期しないエラーが発生する可能性があります。この記事では、浮動小数点演算の落とし穴を浮き彫りにする実践的な例を検討します。
平方根の問題
平方根を近似するように設計された Python 関数を考えてみましょう:
def sqrt(num):
root = 0.0
while root * root この関数を使用すると、驚くべき結果が得られます:
>>> sqrt(4)
2.0000000000000013
>>> sqrt(9)
3.00999999999998
浮動小数点演算により、これらの不正確さは説明されます。小数を表す場合、コンピュータは小数を整数と指数の組み合わせとして保存します。この表現には制限があるため、特定の 10 進数値は正確に表現できず、近似値が生じます。
エラーについて
上記のコードでは、問題はルート値を増やすために使用される増分。値 0.01 を追加するつもりですが、浮動小数点レジスタに格納される実際の値はわずかに異なり、0.01 より大きくなります。
エラーへの対処
回避するには浮動小数点エラーについては、さまざまなアプローチを使用できます:
- 10 進数の使用モジュール:
Python の Decimal モジュールは、より正確な 10 進数演算を提供します。コード内で float を Decimal に置き換えることで、より正確な結果が得られます。
from decimal import Decimal as D
def sqrt(num):
root = D(0)
while root * root
Now, the function returns precise results, such as:
```
>>> sqrt(4)
Decimal('2.00')
>>> sqrt(9)
Decimal('3.00')
```
- 非浮動小数点インクリメントの使用:
Decimal モジュールの使用がオプションでない場合、別のアプローチは、バイナリで正確に表現できる浮動小数点値を使用することです。 1/2**Jなど。これにはより複雑なコードが含まれますが、正確な増分が保証されます。 - 数値分析テクニックの採用:
数値分析は、複雑な数学的計算を処理するための特殊な方法を提供します。ニュートン法のような手法を使用すると、正確な平方根近似を行うことができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3