Bonjour,
http://pastebin.com/HTRFrz8C
j'ai essayé de calculer la factorielle de grand nombre comme 99999
Quelqu'un saurait m'expliquer (ou me donner un site où c'est expliqué)
Comment fait Haskell pour gérer des nombres aussi gigantesques instantanément ?
je n'ai pas trouvé d'explications à ce sujet sur le net
fact 99999 ici : https://wall.deblan.org/x1be8/html/1/
qui a été calculé quasiment instantanément, je ne sais pas si ce nombre correspond bien à 99999!
par contre le résultat sorti de 5! et autre factoriel vérifiable sont corrects
le resultat sortie est d'environ 456570 chiffres, comment gère t-il des nombres aussi grand ? il utilise des tableau de chiffres ? Mais dans ces cas là, pour multiplier 2 nombres representer par des tableaux de variable entières, comment fait-il pour les multiplier ? En posant la multiplication comme on la pose en primaire ? Mais ça m'étonnerait beaucoup sinon ce serait pas aussi rapide j'imagine, si?
à part ça je ne vois pas du tout comment ces nombres pourraient être representé, pour le resultat final de l'ordre de 10^456570, je ne pense pas que ce soit representable comme une simple variable de type primitif comme un simple integer, sinon ça voudrait dire que pour le representer en mémoire il faudrait environ lb(10)*456570 bits soit quasiment 189kB pour le résultat final, non? Puis sans compter les 99990 autres big nombres nécessaires à la multiplication qui ont un ordre de grandeur allant de 10 à 10^456570, ça me parait quand même assez colossale, d'où mon incompréhension face au resultat quasi instantanné
si j'ai bien compris, Haskell est qualifié de paresseux car il calcule seulement ce dont il a besoin et que même si on lui demande de calculer quelque chose il ne le calculera pas s'il en a pas besoin dans l'immediat pour afficher ce qu'on lui demande
mais dans le cas de la factorielle, il y a bien à un moment donné où il devra faire de la multiplication de grand grand nombre pour arriver au résultat final
merci pour vos futures réponses/explications/liens