Потому что числа в JavaScript с плавающей точкой. Они имеют ограниченную точность.
Когда JavaScript видит очень длинное число, он округляет его до ближайшего числа, которое он может представить как 64-разрядное число с плавающей точкой. В вашем скрипте start
и end
округляются до одного и того же значения.
alert(1234567890123456789); // says: 1234567890123456800
alert(1234567890123456799); // says: 1234567890123456800
Нет встроенного способа точной арифметики для больших целых чисел, но вы можете использовать библиотеку BigInteger, например , эту .
.