Javascript Fibonacci
function fibo() {
var first,second,add;
for(var i=0;i<4000;i++){
if(i === 0){
first = 1;
second = 2;
}
add = first + second;
first = second;
second = add;
}
alert(add);
}
fibo();
pas de travail indique l'infini pourquoi?
Parce que le 4000e nombre de Fibonacci est beaucoup trop grandes pour le JavaScript pour le gérer?
OriginalL'auteur vetri02 | 2011-11-30
Vous devez vous connecter pour publier un commentaire.
Simple: parce que c'est trop gros.
Le 300e terme est 222232244629420445529739893461909967206666939096499764990979600, de sorte que vous pouvez l'imaginer comment big le 4000e est. Vous ne pouvez pas tenir une telle valeur dans une variable JavaScript.
Si vous voulez vraiment le calculer, utiliser une précision arbitraire de la bibliothèque, et peut-être autre chose que JavaScript si vous souhaitez calculer rapidement.
Vérifier GNU Multiple Precision Arithmétique de la Bibliothèque - GMP. Agréable à utiliser avec C, et il a même spécial de Fibonacci fonctions.
Voici un petit programme en C pour faire le travail:
Compiler avec:
Et de l'exécution 🙂
php bcmath pourrait gérer une opération comme ça. Êtes-vous le calcul de la valeur pour quelque chose comme Projet d'Euler?
oui suis tryin pour le faire
perl -M'Math::BigInt lib=>GMP' -E 'my $a = Math::BigInt->new(0); my $b = Math::BigInt->new(1); for (3..4000) { $c = $a + $b; $a = $b; $b = $c } say $c'
😛vérifier mes mises à jour de réponse. Telle une bête de temps pour la calculer (désolé pour la formulation).
OriginalL'auteur sidyll
Ok, c'est extrêmement en retard à la fête, mais juste par souci d'exhaustivité, voici une pure javascript solution. Il utilise un certain nombre de librairies.
Vous aurez besoin biginteger (http://silentmatt.com/biginteger/) et la paresse (https://github.com/rfw/sloth.js). Également, la solution nécessite l'activation de Javascript 1.7 Générateurs (voir https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Iterators_and_Generators).
Le code est un peu excentrique (l'utilisation de la méthode load() et de la fenêtre) parce que je voulais le tester dans rhino, sans ajout de mnp de soutien. Si cela vous trouble, juste faire semblant que vous voyez un require() appel 🙂
OriginalL'auteur Mike Hogan
Bien que déjà accepté, je pense que je peux offrir une solution plus simple. Juste stocker des nombres dans les tableaux, un chiffre par élément, et effectuer une addition, comme vous l'avez fait à l'école primaire "dans les colonnes". Il va comme ceci:
Et la fonction de fibonacci est comme ceci:
Semble totalement inefficace, mais ne prend que quelques fractions de seconde pour obtenir
fib(4000)
sur un 2.3 GHz macbook.OriginalL'auteur georg
Parce que
Number.MAX_VALUE + Number.MAX_VALUE === Infinity
Le problème est que
sum
dépasse les JavaScripts capacités pour stocker des valeurs numériques.OriginalL'auteur zzzzBov
fibonacci(4000) [836 chiffres]
39909473435004422792081248094960912600792570982820257852628876326523051818641373433549136769424132442293969306537520118273879628025443235370362250955435654171592897966790864814458223141914272590897468472180370639695334449662650312874735560926298246249404168309064214351044459077749425236777660809226095151852052781352975449482565838369809183771787439660825140502824343131911711296392457138867486593923544177893735428602238212249156564631452507658603400012003685322984838488962351492632577755354452904049241294565662519417235020049873873878602731379207893212335423484873469083054556329894167262818692599815209582517277965059068235543139459375028276851221435815957374273143824422909416395375178739268544368126894240979135322176080374780998010657710775625856041594078495411724236560242597759185543824798332467919613598667003025993715274875
OriginalL'auteur kennebec
Pour de meilleurs résultats, vous pouvez utiliser le jsperf.com: http://jsperf.com/fib-vs-fib-loga/
Juste une petite modification dans la fonction permettant d'obtenir la position maximum possible de calculer par javascript.
Oui, le résultat sera différent sur chaque navigateur et de l'arche de fèves utilisées.
Le résultat est:
1473
8.077637632156222e+307
1.3069892237633987e+308
Où 1473 est le maximum de fibonacci position possible de calculer avec javascript.
OriginalL'auteur Gabriel Gartz
PubNub de Ariya Hidayat nous a enseigné cette dernière nuit:
x.concat
est utilisé ici, c'est soooo beaucoup plus lent quex.push(...); return x;
Je viens de mesuré, c'est plus qu' 6x plus lent à utiliser concat au lieu de pousser! Malgré le fait que la solution n'est pas complète tant que vous avez encore ajouter les deux derniers éléments dans le tableau.
OriginalL'auteur tonyland