对于Loop Max JavaScript

时间:2014-03-26 00:41:19

标签: javascript for-loop

我刚刚创建了一个素数查找程序,其中包含一个随时间运行的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!");

4 个答案:

答案 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 
}