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,操作系统和硬件。可以肯定的说Math.sin/cos在现代PC和服务器硬件上需要几百纳秒 - 不仅仅是从主内存中加载一些内容 - 所以最大化性能的最佳方法是尽可能缓存。但在进行更改之前和之后总是进行测量。
相关问题
- 1. 在Python中它存在函数从三角函数值返回角度吗?
- 2. 三角函数
- 3. 我应该禁用WebClient缓存吗?
- 4. 应该缓存getSystemService(...)结果吗?
- 5. 我应该缓存System.getProperty(“line.separator”)吗?
- 6. 我应该缓存载波网址吗?
- 7. Angular:应该缓存静态内容吗?
- 8. 我应该缓存Firebase参考吗?
- 9. 三角三角函数(ActionScript 3)
- 10. SPARQL三角函数
- 11. CloudFlare不应该与“缓存一切”缓存所有内容吗?
- 12. 函数应该调用吗?
- 13. 函数应该有效吗?
- 14. 我应该缓存数据库数据吗?
- 15. 该符号的直角三角形,边数等于该数字
- 16. 逼近反三角函数
- 17. 3d三角函数方程
- 18. Objective-C三角函数
- 19. 的Python:用三角函数
- 20. 缓存mustache.js模板函数可能吗?
- 21. 缓存本地函数声明吗?
- 22. 函数不应该是参数吗?
- 23. 我应该担心高速缓存的内存吗?
- 24. `constexpr`函数也应该是`noexcept`吗?
- 25. 我应该在浏览器内存中缓存多少数据有限制吗?
- 26. 响应三角?
- 27. Python函数缓存?
- 28. 缓存服务是否应该存在?
- 29. 数学,简化三角函数
- 30. Mathematica中三角函数和的系数
你应该让JIT担心这一点。 – Kayaman