サードパーティが提供するライブラリのテストを依頼されました。ライブラリは有効数字n桁まで正確であることが知られています。重要度の低いエラーは無視しても問題ありません。結果を比較するのに役立つ関数を書きたい:
def nearlyequal( a, b, sigfig=5 ):
この関数の目的は、2 つの浮動小数点数 (a と b) がほぼ等しいかどうかを判断することです。a==b (完全一致) の場合、または a と b が10 進数で書かれたsigfig有効数字に丸められたときに同じ値を持つ場合、関数は True を返します。
誰かが良い実装を提案できますか? ミニユニットテストを書きました。私のテストでバグが見られない限り、適切な実装は以下に合格する必要があります。
assert nearlyequal(1, 1, 5)
assert nearlyequal(1.0, 1.0, 5)
assert nearlyequal(1.0, 1.0, 5)
assert nearlyequal(-1e-9, 1e-9, 5)
assert nearlyequal(1e9, 1e9 + 1 , 5)
assert not nearlyequal( 1e4, 1e4 + 1, 5)
assert nearlyequal( 0.0, 1e-15, 5 )
assert not nearlyequal( 0.0, 1e-4, 6 )
その他の注意事項:
- 値 a および b は、int、float、または numpy.float64 型の可能性があります。値 a と b は常に同じ型になります。変換によって関数に追加のエラーが発生しないことが重要です。
- これを数値のままにしておきます。そのため、文字列に変換したり、数学以外のトリックを使用したりする関数は理想的ではありません。このプログラムは、関数が本来の機能を果たしていることを証明したいと考えている数学者によって監査されます。
- 速さ…たくさんの数字を比較しなければならないので、速ければ速いほどいいです。
- numpy、scipy、および標準ライブラリがあります。特にプロジェクトのこのような小さな部分については、他のものを手に入れるのは難しいでしょう.