私は二重スコアの重要な計算を含むJavaプログラムを作成しています。今はとても遅いです。は小数点以下を四捨五入して計算を加速します
0.54583574982374592から0.5458のように小数点以下を四捨五入すると、これは私のプログラムを加速するでしょうか?
私は二重スコアの重要な計算を含むJavaプログラムを作成しています。今はとても遅いです。は小数点以下を四捨五入して計算を加速します
0.54583574982374592から0.5458のように小数点以下を四捨五入すると、これは私のプログラムを加速するでしょうか?
10進ではありません。ポイントの後の小数点以下の桁数は、数字の「複雑さ」の本当に悪い指標です。例えば、0.1はバイナリの無限小数であり、たくさんのビットを設定します。バイナリでの丸めにはいくつかの影響がありますが、除算と平方根(source、および個人的な実験)の場合のみ - 一般的な演算(加算、乗算、比較)はそのようにオペランドの値に依存しません(subnormalsは、操作とμarchに依存します)。
ありがとう!申し訳ありませんが、私は質問を投稿した直後、私はそれがすべての原因がビットではないことを認識し始めました。私はパフォーマンスが悪い他の理由を見つける必要があると思います。 –
短い答え:なし
double
は、その操作の速度に影響を与える変数の精度を持っていません。
いいえ。お使いのコンピュータには、正確な精度で 'double '値で動作するように設計されたハードウェアがあります。他の 'double'値ではそれ以上速く動かないでしょう。 –
いいえ。しかし、 'float'を使うことができます。 64ビットである 'double'とは異なり、' float'は32ビットであり、より高速かもしれません。 –
実際に 'double'算術を使用している場合は、パフォーマンス上の問題になる可能性は低いです。ボクシング/アンボックス(Doubleに変換する場合)またはメモリアクセスパターンの可能性が高くなります。 –