Javaで、最悪の場合に近づくことができる数値を計算し1e-25
、それらを比較するツールに取り組んでいます。私は明らかに倍精度を使用しています。
精度以上のものを期待するべきではないという別の回答を読みました。この他の質問は、「より良い」順序で操作を順序付けするときに精度を高めることを扱っています。1e-15
1e-17
途中で精度が失われやすい倍精度演算はどれですか? できるだけ大きい数またはできるだけ小さい数で作業する必要がありますか? 掛け算の前に割り算をしますか?
コードはすでに十分に遅いため、クラスまたは同等のものを使用しBigDecimal
たくありません;) (もちろん、速度にあまり影響しない場合を除きます)。
どんな情報でも大歓迎です!
EDIT : double は 1e-324 まで下がる可能性があるため、数値が絶対値 (1e-25) で「小さい」という事実は問題ではありません。しかし、重要なのは、それらが非常に似ている場合 (両方とも 1e-25)、比較する必要があることです。たとえば、4.64563824048517606458e-21 と 4.64563824048517606472e-21 を比較します (違いは 19 桁目と 20 桁目です)。これらの数値を計算すると、差が非常に小さいため、残りが乱数で埋められる「丸め誤差」に遭遇する可能性があります。
問題は、「この精度の損失を最小限に抑えるために計算をどのように順序付けるか」です。乗算の前に除算を行っているか、最初に加算を行っている可能性があります。