【发布时间】:2016-09-09 18:50:06
【问题描述】:
我写的函数有问题。想法是使用 taylor 扩展而不是 js 数学对象来计算 sin 和 cosin 值(在 radians 上操作)。这些是方程式:
sin(x) = (x^1)/1! - (x^3)/3! + (x^5)/5! - (x^7)/7! + (x^9)/9! - (x^11)/11! + ...
cos(x) = (x^0)/0! - (x^2)/2! + (x^4)/4! - (x^6)/6! + (x^8)/8! - (x^10)/10! + ...
我知道当我输入类似myCos(10,2) 的内容时,由于迭代次数少,结果会不准确,但是我不明白为什么(例如)x = 10 结果在特别是@987654331 开始变得真实@,并在 iterNum = 80 处变为 NaN。关键是对于myCos/Sin(1-40, 5-50)(或多或少)这样的范围,函数有效,但对于更大的数字,结果变为 NaN。不确定我的解释是否可以理解,但我希望可以,继续在控制台中使用该功能,您会看到问题所在
这是我的代码:
function power(a,n) {
var result = 1;
for (var i = 0; i < n; i++) {
result = result * a;
}
return result;
}
function factorial(z) {
var result = 1;
for (var i = 1; i <= z; i++) {
result = result * i;
}
return result;
}
function mySin(x, iterNum) {
var sin = 0;
var n = 1;
for (var i = 0; i <= iterNum; i++) {
sin = sin + (power(x,n)/factorial(n) - power(x,n+2)/factorial(n+2));
n = n + 4;
}
console.log(sin + " = my function.");
console.log(Math.sin(x) + " math.sin");
}
function myCos(x, iterNum) {
var cos = 0;
var n = 0;
for (var i = 0; i <= iterNum; i++) {
cos = cos + (power(x,n)/factorial(n) - power(x,n+2)/factorial(n+2));
n = n + 4;
}
console.log(cos + " = my function.");
console.log(Math.cos(x) + " math.cos");
}
【问题讨论】:
-
请参阅stackoverflow.com/a/22791396/3088138、stackoverflow.com/a/28227419/3088138 了解阶乘和无功率实现,这可以避免 NaN,但不会因为较大的
x而导致非常大的项的灾难性取消。
标签: javascript math