所以我正在计算序列的最后十位数:
1 ^ 1 + 2 ^ 2 + 3 ^ 3 + ... + 1000 ^ 1000
但是我一直得到NaN。
代码:
function myFunction() {
var i, x, a, sum = 0; {
for (i = 1; i <= 1000; i++) {
var a = Math.pow(i, i);
sum += a;
}
var x = sum;
var y = x % 10000000000;
}
document.getElementById("demo").innerHTML = y;
}
<p>Click the button to demontrate </p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
答案 0 :(得分:1)
Math.pow(1000, 1000)
那是一个非常非常大的数字(3000个零),所以javascript无法处理它,这就是上述结果为Infinity
的原因。而且无法确定无限数的模,因此结果不是数字。
答案 1 :(得分:0)
JavaScript对所有内容都使用64位浮点数。其中之一的最大值约为1.8×10 ^ 308,比您的1000 ^ 1000的值小很多。结果,由于它尝试计算的数字无法放入“数字”类型的变量中,因此Javascript返回NaN并保留该数字。
答案 2 :(得分:0)
Number.MAX_VALUE是可用的最大数量。
否则,您必须使用一些库,例如:https://mikemcl.github.io/bignumber.js/
答案 3 :(得分:0)
答案 4 :(得分:0)
您有一个无穷大值,请尝试下面的代码:
function myFunction() {
var i, x, a, sum = 0; {
for (i = 1; i <= 1000; i++) {
var a = Math.pow(i, i);
if(a!=Infinity)sum += a;
}
var x = sum;
var y = x % 10000000000;
document.getElementById("demo").innerHTML = y;
}
答案 5 :(得分:0)
正如@ jonas-w正确指出的那样,您的特定问题是尝试取无数的模。 infinity % anyNumber
产生NaN。
此外,您需要了解浮点值使用科学计数法。这意味着对于较大的数字,您所有的有效数字(JavaScript所使用的IEEE 754双精度数字为53)都位于该值的上限,而您的模数却位于该值的下限。
例如,1.1×10 ^ 6是1,100,000,1.2×10 ^ 6是1,200,000。获得% 100
是毫无意义的,因为两者都得出0。
您要用此代码完成什么工作?