我写了一些跟踪代码来描述我的问题。
GLOBALS.customTrace = "COS 0: " + String(Math.cos(0 * Math.PI / -180)) + " //OK\n";
GLOBALS.customTrace += "SIN 0: " + String(Math.sin(0 * Math.PI / -180)) + " //OK\n";
GLOBALS.customTrace += "COS 90: " + String(Math.cos(90 * Math.PI / -180)) + " //WHY ?\n";
GLOBALS.customTrace += "SIN 90: " + String(Math.sin(90 * Math.PI / -180)) + " //OK\n";
GLOBALS.customTrace += "COS 180: " + String(Math.cos(180 * Math.PI / -180)) + " //OK\n";
GLOBALS.customTrace += "SIN 180: " + String(Math.sin(180 * Math.PI / -180)) + " //WHY ?\n";
GLOBALS.customTrace += "COS 270: " + String(Math.cos(270 * Math.PI / -180)) + " //WHY ?\n";
GLOBALS.customTrace += "SIN 270: " + String(Math.sin(270 * Math.PI / -180)) + " //OK\n";
上面的代码......
...返回此输出。
我不知道怎么处理这个?我不需要实际值用于整个角度,但我需要cos90,sin180,cos270的实际值!
此外,还有另一个问题,但我觉得这是上述真正问题的结果。 我在这段代码中都使用-180和+180,但它们都返回负值。
GLOBALS.customTrace = "COS 270 with Math.PI / -180\n" + String(Math.cos(270 * Math.PI / -180)) + " //IF THIS NEGATIVE...\n\n";
GLOBALS.customTrace += "COS 270: with Math.PI / +180\n" + String(Math.cos(270 * Math.PI / 180)) + " //...WHY THIS NEGATIVE TOO ?\n";
上面的代码......
...返回此输出
答案 0 :(得分:2)
原因是Math.PI != π
。
您可以尝试使用toFixed(15)
来获得准确的值。
trace(String(Math.cos(90 * Math.PI / -180).toFixed(15)));
trace(String(Math.sin(180 * Math.PI / -180).toFixed(15)));
trace(String(Math.cos(270 * Math.PI / -180).toFixed(15)));
trace(String(Math.cos(90 * Math.PI / -180).toFixed(15)) == 0);
trace(String(Math.sin(180 * Math.PI / -180).toFixed(15)) == 0);
trace(String(Math.cos(270 * Math.PI / -180).toFixed(15)) == 0);
输出
0.000000000000000
-0.000000000000000
-0.000000000000000
true
true
true