Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:为什么这会导致无限循环?_Javascript_Algorithm_Bit Manipulation_Integer Overflow - Fatal编程技术网

JavaScript:为什么这会导致无限循环?

JavaScript:为什么这会导致无限循环?,javascript,algorithm,bit-manipulation,integer-overflow,Javascript,Algorithm,Bit Manipulation,Integer Overflow,我试图通过找到JavaScript数字行环绕的点来找到最大的数字。例如,如果它只能保存数字0,1127,那么我会使用“127+1=0”这一事实来查找127。所以我做了一个函数 function getLargestNumber ( ) { var somethingBig = 12939123, last = (somethingBig - 1); while ( ++somethingBig > ++last ); return last; } 但这会导致无限循环(

我试图通过找到JavaScript数字行环绕的点来找到最大的数字。例如,如果它只能保存数字
0,1127
,那么我会使用“
127+1=0
”这一事实来查找
127
。所以我做了一个函数

function getLargestNumber ( ) 
{
   var somethingBig = 12939123, last = (somethingBig - 1);
   while ( ++somethingBig > ++last );
   return last;
}
但这会导致无限循环(或者由于其他原因导致浏览器崩溃)


我的函数的逻辑有什么问题吗?

JavaScript数字总是以浮点数的形式存储,而不是像C中那样的整数。浮点数的“环绕”方式与C整数的“环绕”方式不同


这可能会帮助您

JavaScript数字始终存储为浮点数,而不是像C中那样的整数。浮点数的“环绕”方式与C整数的“环绕”方式不同


这可能会帮助您

看起来while循环将永远运行,因为您总是同时递增somethingBig和last,因此somethingBig将始终更大:

while ( ++somethingBig > ++last );
我不确定你到底想完成什么,但这将是无限循环的原因


希望这有帮助

看起来while循环将永远运行,因为您总是同时递增somethingBig和last,因此somethingBig将始终更大:

while ( ++somethingBig > ++last );
我不确定你到底想完成什么,但这将是无限循环的原因



希望这有帮助

他希望
somethingBig
last
之前溢出并环绕到0。@Barmar不一定是零。。。可能是最小的负数。谢谢@Barmar,不幸的是它比预期的要长一点:)@SubparWebDev对,我想到的是无符号数字。他希望
一些大的
溢出并在
最后一次
之前返回到0。@Barmar不一定是零。。。可能是最小的负数。谢谢@Barmar,不幸的是它比预期的要长一点:)@SubparWebDev对,我想到的是无符号数字。当数字太大以至于精度不包括最低数字时,它应该最终停止。@Barmar如果它最终停止,那么我应该寻找
somethingBig+1=somethingBig
的点吗?是的,但这不是JavaScript数字可以达到的最大值。这只是整数精度开始丢失之前的最大数字。@SubparWebDev Correct。以每秒100万次迭代的速度,这将需要285年左右的时间。@SubparWebDev您想实现什么?当数字变得如此之大,以至于精度不包括最低数字时,它应该最终停止。@Barmar如果它最终停止,那么我应该寻找
somethingBig+1=somethingBig
的点吗,但这并不是JavaScript数字可以达到的最大值。这只是整数精度开始丢失之前的最大数字。@SubparWebDev Correct。以每秒100万次的速度,这将需要285年的时间。@SubparWebDev您想实现什么?