Math.sin()
、Math.cos()
などの機能はどれくらいの規模ですか? 複数の同じ引数を持つメソッドを連続して呼び出すと、コンパイラはコードを最適化しますか?そうでない場合は、これらのメソッドを何回呼び出すかによって、結果を変数にキャッシングする必要がありますか?三角関数をキャッシュする必要がありますか?
3
A
答えて
1
三角関数は通常、テイラー展開として実装されます。彼らは速いです。あなたは自分で書くことができますし、比較することができます。
public class Main{
private static double factorial(double n) {
if (n <= 1) // base case
return 1;
else
return n * factorial(n - 1);
}
private static double sin(int n) {
int PRECISION = 10;
double rad = n*1./180.*Math.PI;
double sum = rad;
for (int i = 1; i <= PRECISION; i++) {
if (i % 2 == 0)
sum += Math.pow(rad, 2*i+1)/factorial(2 * i + 1);
else
sum -= Math.pow(rad, 2*i+1)/factorial(2 * i + 1);
}
return sum;
}
public static void main(String []args){
System.out.println(sin(180));
System.out.println(Math.sin(Math.PI));
System.out.println(sin(90));
System.out.println(Math.sin(Math.PI/2));
System.out.println(sin(200));
System.out.println(Math.sin(200*2*Math.PI/360));
}
}
確かに値をキャッシュできますが、これらのメソッドはすでに最適化されている可能性があります。
1
すべてのパフォーマンスに関する質問と同様に、回答はJVM、OS、およびハードウェアによって異なるため、ベンチマークを作成して自分で見つけてください。 Math.sin/cosは、メインメモリから何かをロードするよりも、現代のPCとサーバーのハードウェアで数百ナノ秒かかると言っても過言ではありません。しかし、変更を加える前と後で常に測定してください。
関連する問題
- 1. getSystemService(...)の結果をキャッシュする必要がありますか?
- 2. クエリーストリングでTemplateViewをキャッシュする必要がありますか?
- 3. mongooseクエリをキャッシュする必要がありますか?
- 4. firebaseのリファレンスをキャッシュする必要がありますか?
- 5. 三角形の数にはどのような要因がありますか?
- 6. アンドロイドロケール通知、キャッシュをダンプする必要があります
- 7. データを先にキャッシュする必要があります
- 8. ラベルにRedisキャッシュを使用する必要があります
- 9. Android Studioでキャッシュを削除する必要があります
- 10. サービスワーカーでmanifest.jsonをキャッシュする必要があります
- 11. アセンブリx86:Ackermann関数をプログラムする必要があります
- 12. Pythonの関数を理解する必要があります
- 13. dlsymの戻り値をキャッシュする必要がありますか?
- 14. フィットネス関数がスカラー値を返す必要があります
- 15. (静的に)第三者コードをタイプチェックする必要がありますか?
- 16. 角度の三角関数
- 17. フェッチのキャッシュをクライアントが管理する必要がありますか?
- 18. json、Bson、またはJObjectをICacheManagerにキャッシュする必要がありますか?
- 19. 三角関数(JavaScript)を使わずに角度を処理する方法はありますか?
- 20. JavaScript関数は配列を返す必要があります
- 21. Angular2 Observable - 関数は値を返す必要があります
- 22. Tをパラメータ、関数、または何にする必要がありますか?
- 23. オブジェクトリテラルまたはコンストラクタ関数を使用する必要がありますか?
- 24. 依存関係をシェードする必要がありますか?
- 25. なぜhaskellで関数を作成するときに角括弧を使う必要がありますか?
- 26. ボタンクリックで角度アプリをリフレッシュする必要があります
- 27. ブラウザで角度を指定する必要があります
- 28. 質問キャッシュを定期的にリセットする必要がありますか?
- 29. 常に.envでキャッシュをクリアする必要がありますか?
- 30. BLOBコンテンツをローカルHDにキャッシュする必要がありますか?
あなたはJITにそれを心配させるべきです。 – Kayaman