Я играл с написанием последовательности Fibonacci по javascript, так как я никогда не пытался это сделать, придумал простую итеративную формулу для ее вычисления. Затем я решил протестировать его, выполнив 10000 итераций, чтобы увидеть результаты. к моему удивлению, он работал до 1476-й итерации, а затем сломался. 1477 и 1478 оба дали результат «Бесконечность». Я пробовал разные браузеры, меняя методы отображения, но получал те же результаты.Последовательность Fibonacci приводит к бесконечности, затем NaN
1475i - 1.3069892237633983e + 308 1476i - Бесконечность 1477i - Бесконечность 1478i - NaN
код используется:
<!DOCTYPE html><html><head><script>
function fibonacci(){
var x = 1;
var y = 0;
for(i=0;i<1478;i++){
var box = document.createElement('div');
box.setAttribute('id','box'+i);
document.body.appendChild(box);
document.getElementById('box'+i).innerHTML = [i] + 'i - ' + x;
x = x + y;
y = x - y;
}
}
</script></head><body onLoad="fibonacci();"><div id="output"></div></body></html>
Я не уверен, что если бы тогда функция сломал в некоторой точке, или что я, возможно, не принял во внимание в последовательности. И да, я понимаю, что я пропустил первое целое число, но это не должно влиять на функцию.
JavaScript использует 64-битные целые числа. Смысл, JavaScript может содержать только значение, равное 2^64 - 1. Однако я не уверен на 100%, если это проблема, с которой вы сталкиваетесь. –
Это было сделано без просмотра каких-либо других образцов, которые при этом выглядят так, как будто большинство из них используют гораздо более сложные способы получения одного и того же результата.Я думаю, что это вопрос слишком большого числа. Благодарю. –
@JustinWood Это неправда. JavaScript использует 64-битную * плавающую точку * с 52-битной мантиссой. Один из способов увидеть это - заметить, что первое целое число, которое JavaScript не может содержать как число, равно 2^53 + 1. – Matt