JavaScript:为什么这会导致无限循环?
我试图通过找到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; } 但这会导致无限循环(
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您想实现什么?