|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 8 ![]() |
Bonjour à tous,
Débutant en LISP, je commence à me poser quelques questions assez existentielles, à propos de la mémoire dans ce langage. En testant une fonction 'factorielle' définie récursivement, j'ai pu observer que lisp (je suis sous clisp) permettait de calculer des nombres très très grands. L'interpréteur me renvoie une valeur (qui me parait correcte, plus ou moins) de factorielle(1000). Ceci est impossible en C, ou en JAVA, avec les types primaires, ceux ci étant représentés (si je me souviens bien) sur un maximum de 4 octets. La fonction factorielle en C ou en JAVA ne donne de bonnes valeurs que pour n <= 20, ensuite -> débordement. Quel miracle permet à LISP de renvoyer des valeurs aussi énorme ? Si l'un d'entre vous a la réponse .. !! Merci d'avance. |
|
|
00
|
|
|
#2 | |
|
Membre confirmé
![]() Étudiant Inscription : novembre 2010 Messages : 120 ![]() |
Ce lien pourrait peut-être t'éclairer http://x86asm.net/articles/working-w...ons/index.html
ça parle un peu d'assembleur mais c'est pas l'essentiel de l'article. On y décrit surtout la représentation des "grands" nombres en mémoire, ainsi que leur manipulation (addition, soustraction...). On remarque que c'est pas si « miraculeux » finalement Après, si ton implémentation LISP permet de manipuler des nombres infiniment très grand, et ce arbitrairement, (du moins tant qu'on a de la RAM), c'est peut-être qu'il y a un système d'allocation dynamique (histoire de pas allouer 50 octets juste pour un nombre qui rentre dans 10), mais le principe resterait le même que celui du lien ci-dessus, mais en dynamique. Citation:
La limite de la valeur d'un entier non-signé, suivant le nombre n de bits sur lequel il est représenté, est donné par : (2^n)-1. Ainsi sur 4 octets soit 32 bits tu ne peux dépasser (2^32)-1. En utilisant, en C, le type 'double', tu peux avoir une valeur correcte jusqu'à un peu plus de 170!, si je me souviens bien. Donc le nombre de bits n'est pas le seul facteur, il y aussi le format de représentation, en l'occurrence c'est le format IEEE Double Precision (pour mon 170!) si je me souviens bien. (cf. http://fr.wikipedia.org/wiki/IEEE_75..._.2864_bits.29 ). En espérant avoir pu t'aider |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com