【要約】初心者でも分かる!0.1 + 0.2 ≠ 0.3!? [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が小数の計算結果を比較する際、期待した値と一致せず、予期せぬバグに直面することがある。
- ・小数の足し算結果が、数学的な期待値と異なる。
- ・「0.1 + 0.2」が「0.30000000000000004」となる。
- ・2進数では0.1などの小数を正確に表現できない。
- ・有限のビット数による丸め誤差が発生する。
// Approach
誤差の発生メカニズムを理解した上で、用途に応じた3つの回避策を提案している。
- ・最小単位の整数化:123.45円を12345(100分の1円単位)として扱う。
- ・近似比較:math.isclose() 等を用い、許容誤差の範囲内で一致を判定する。
- ・専用ライブラリの利用:Decimal(Python)や decimal.js(JS)で10進数計算を行う。
// Result
適切な対策を講じることで、エンジニアは計算精度の問題を制御できるようになる。
- ・決済やポイント計算における、1円単位の不整合を防止できる。
- ・浮動小数点数特有の比較バグを、設計段階で回避できる。
- ・精度とパフォーマンスの要件に応じた、最適な実装を選択できる。
Senior Engineer Insight
> 本記事の対策は実務における鉄則である。特に金融系システムでは、浮動小数点数の使用は原則禁止すべきだ。整数管理かDecimalの採用は、信頼性を確保するための必須判断となる。低レイテンシが求められる現場では、Decimalのオーバーヘッドに注意が必要だ。しかし、正確性が優先される領域では避けて通れない知識である。