我刚刚创建了一个素数查找程序,其中包含一个随时间运行的for循环。现在它在167899并且每秒都在增长。
for循环可以通过的最大循环数是多少?如果它是一个不合时宜的大数字,我不想整夜等待,看看我能产生的最大素数是多少。
是无限的吗?
这是我的代码:
var isNotPrime = false;
var currentNumber = 3;
var primeArray = [2];
function prime(){
isNotPrime = false;
for(a=0; a<primeArray.length; a++){
if(currentNumber%primeArray[a] === 0){
isNotPrime = true;
}
if(a===(primeArray.length-1) && isNotPrime ===false){
document.write(currentNumber+"<BR>");
primeArray.push(currentNumber);
}
if(a===(primeArray.length-1)){
currentNumber++;
}
}
}
var main = setInterval(prime, 1);
window.alert("Starting search for Prime Numbers!");
答案 0 :(得分:2)
由于您可以拥有无限循环,因此循环无法执行的最大次数:
for (var i = 0; i < 1;) { console.log('this will keep running forever' }
(请注意,for循环的i < 1;
之后的增量步骤为空,而不是i++
)
然而,有max integer in Javascript,这可能就是你所追求的。
答案 1 :(得分:1)
只要长度是整数,它就可以并将继续循环。 相信int的最大数字是9 007 199 254 740 992。 因此循环有可能多次运行。
答案 2 :(得分:1)
您可能需要使用Web worker来阻止浏览器中断该过程。使用Web worker,循环可以无限期运行(好,直到计算机停止运行)。
正如其他人所说,你会遇到处理大数字的问题。可能有一些方法可以解决JavaScript中的整数精度限制:http://www.2ality.com/2012/07/large-integers.html
所以,你的第一个问题的答案是否定的,JavaScript没有明确定义的最大循环数。
第二个问题的答案取决于流程的运行位置。如果进程在真实机器上运行而最终因熵而失败,则循环次数不能是无限的。如果进程在虚拟机中运行,则可以无限期地保持进程运行(直到宇宙热死)。
答案 3 :(得分:0)
JavaScript中的最大安全整数为9007199254740991
,您可以在浏览器的控制台中对其进行检查
console.log('Max safe integer' , Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log('Min safe integer' , Number.MIN_SAFE_INTEGER); // -9007199254740991
console.log('Max value' , Number.MAX_VALUE); // 1.7976931348623157e+308
console.log('Min value' , Number.MIN_VALUE); // 5e-324
因此您可以运行
for (let i = 1; i <= Number.MAX_SAFE_INTEGER; i ++) {
// console.log('Number ', i); <-- Uncomment this line and wait, but why? I don't recommend, because your browser will crash probably
}