IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Mise en mémoire des nombres en LISP ?!?


Sujet :

Lisp

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Mise en mémoire des nombres en LISP ?!?
    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.

  2. #2
    Membre actif Avatar de golden boy
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 120
    Points : 230
    Points
    230
    Par défaut
    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.

    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.
    Ce n'est pas le cas pour toutes les machines, mais tu remarqueras que 4 octets correspond à 32 bits, soit la taille maximale d'une « entité » avec laquelle de nombreux processeurs actuels effectuent les calculs. Sur 32 bits (en entier non-signé) tu devrais en principe ne pas pouvoir dépasser 12!.
    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

Discussions similaires

  1. Mise en forme des nombres
    Par helpcomm dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/10/2011, 21h41
  2. Réponses: 4
    Dernier message: 20/10/2010, 19h56
  3. Mise en mémoire des lignes d'une feuille Excel
    Par dj-julio dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/11/2007, 10h32
  4. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34
  5. [] [Install] Problème de mise à jour des dll
    Par pepper dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 23/01/2003, 22h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo