高精度の整数 (long または BigInteger) を小さな倍精度浮動小数点数 (> 0 および < 1 について考える) で乗算し、演算の正確な算術値の算術丸め整数 (long または BigInteger) を結果として取得したいと考えています。
double から integer への変換は機能しません。これは、小数値が失われるためです。
整数を double に変換してから、乗算して結果を整数に戻すこともできません。これは、double の精度が十分でないためです。もちろん、二重オペランドはそもそも十分に正確ではないため、結果が同じ桁数で正確でないことは問題にならないかもしれないと主張することもできますが、この場合はそうです。
おまけの質問:
BigDecimal の使用は機能しますが、非常に効率が悪いようです。long を double に変換してから乗算し、元に戻すと、BigDecimal に変換するよりも 500 倍高速に実行されるようです (ただし、精度は失われます)。より効率的な可能性はありますか?いくつかの異なる long をそれぞれ同じ double で乗算すると、パフォーマンスを向上させることは可能ですか?