sin我正在学习 Java,并对( cos) 方法的工作原理很感兴趣。我注意到在 j 上获取正弦的速度因函数参数而异。如果角度小于 0.785...rad,则计算速度很快,如果大于 - 则计算速度较慢。
与 C# 相比,结果恰恰相反:
以毫秒为单位检查 1000 万次正弦计算。
为什么会是这样的结果?
这是从 0 到 4*pi 的 java 余弦/正弦的结果:
public static void main(String[] args) {
long a;
for (double x = 0; x < 4 * Math.PI; x = x + 0.05) {
a = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
//Math.cos(x);
Math.sin(x);
}
System.out.printf("%.6f, %d \n", x, (System.currentTimeMillis() - a));
}
}
这是 C# 余弦/正弦从 0 到 4*pi 的结果:
public static void Main(string[] args)
{
for (double x = 0; x < 4 * Math.PI; x = x + 0.05) {
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 10000000; i++) {
Math.Cos(x);
// Math.Sin(x);
}
sw.Stop();
Console.WriteLine(x +" - " +(sw.ElapsedMilliseconds).ToString());
}
}



在 C# 中,我不会肯定地说,但在 Java 中,一切看起来像这样:
PI/4=0.785真正弦值的参数值进行计算。PI/4已经通过余弦计算得更多,余弦已经用 14 次多项式近似,则图形上会从那里发生跳跃。最有可能的是,这个故事与 C# 类似,只是使用了不同的库。