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

Scheme Discussion :

Nombres à virgule flottante


Sujet :

Scheme

  1. #1
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut Nombres à virgule flottante
    Bonjour,

    Existe-t-il une notation des nombres à virgule flottante en base 2, 8 et 16 ?

    Si oui, qu'elle est cette notation, je ne parviens pas à la trouver.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par visiwi Voir le message
    Bonjour,

    Existe-t-il une notation des nombres à virgule flottante en base 2, 8 et 16 ?

    Si oui, qu'elle est cette notation, je ne parviens pas à la trouver.
    Dans le R5RS et le R6RS tu as string->number qui te permet de manipuler tes nombres en n'importe quel base (entière bien sûr). Cherche dans la doc pour plus d'info.

    En MzScheme (je ne suis pas sûr que ce soit dans le R5RS)
    Tu as floating-point-bytes->real pour convertir des octets en réel
    Tu peux utiliser #b, #o, #d et #x pour indiquer le type.
    Cherche la doc des « numbers » dans HelpDesk

  3. #3
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    En MzScheme (je ne suis pas sûr que ce soit dans le R5RS)
    Tu as floating-point-bytes->real pour convertir des octets en réel
    Tu peux utiliser #b, #o, #d et #x pour indiquer le type.
    Cherche la doc des « numbers » dans HelpDesk
    Effectivement, cela ne fait pas parti du R5RS. Or c'est justement le R5RS qui m'interesse

    qui te permet de manipuler tes nombres en n'importe quel base (entière bien sûr)
    Mais les entier ne font pas parti de ma question

    Je ne sais pas, mais j'ai vraiment l'impression que ça n'existe pas en R5RS ! Je ne trouve aucune doc nul part. Quelqu'un pourrait-il confirmer ou infirmer ?

    EDIT :
    Tu peux utiliser #b, #o, #d et #x pour indiquer le type.
    oui mais, comment faire pour un nombre à virgule flottante ?

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par visiwi Voir le message
    [...]
    Mais les entier ne font pas parti de ma question [..]
    Peut-être devrais-tu suivre quelque cours de maths ??

    Représentation en base entière, ne veux pas dire entier.
    On représente nos nombres (réels) en base 10.

    Donc si tu ne veux que le R5RS va voir du côté de string->number .

    Avant de poser des questions, on va voir la doc comme je te l'ai dit au premier message Si tu as des questions à partir de là, n'hésites pas.

  5. #5
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Peut-être devrais-tu suivre quelque cours de maths ??
    C'est même certain !
    D'après les renseignements que m'ont communiqués les matheux, les nombres à virgule en base 2, 8 ou 16, s'appelent des nombres à virgule flottante.

    Avant de poser des questions, on va voir la doc comme je te l'ai dit au premier message
    Waou

    Je me suis probablement mal exprimé.
    Ce qui m'intéresse c'est la représentation direct, la notation, pas comment convertir une chaine en nombre, même si ce nombre est bien au final en base 2, 8 ou 16. je ne cherche pas à les manipuler mais a connaitre la déclaration en dur.
    string->number ne répond donc pas à ma préoccupation.

    Je cherche à savoir si il y a une notation qui permet de faire référence à un nombre à virgule flottante en les notant comme des litéraux (en dur) :

    par exemple en base 10 -> 10.545 -> (set! num 10.545)

    Existe-t-il la même chose en base 2, 8 et 16 ? Et si oui comment ?
    Et cela en R5RS.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par visiwi Voir le message
    C'est même certain !
    D'après les renseignements que m'ont communiqués les matheux, les nombres à virgule en base 2, 8 ou 16, s'appelent des nombres à virgule flottante.
    Bizarre, tes "matheux"!

    <Cours de maths>

    Pour faire simple, disons qu'il y a les entiers et les réels.
    3 est entier
    pi est réel
    2.5 est réel

    Un entier n'est jamais qu'un réel particulier.

    La représentation d'un réel X en virgule fixe en base B se fait avec
    • un signe (+1 ou -1)
    • une liste finie Ei représentatn la partie entière
    • une liste finie ou infinie Di représentant la partie décimale

    de manière que:
    X = signe * (E0 + E1*B^1 + E2*B^2 + ... + D1*B^-1 + D2*B^-2 + ...)

    La représentation d'un réel X en virgule flottante en base B (qui n'est pas nécessairement entière!!! mais positive non nulle) se fait avec:
    • un signe (+1 ou -1),
    • une mantisse réelle (comprise entre 1/B et B)
    • un exposant entier
    de manière que: X == signe * mantisse * B ^ exposant


    "3" est une représentation de 3 en base dix

    "11" est une représentation de 3 en base deux.


    "3.14159265" est une représentation d'une approximation de pi, en virgule fixe, en base dix.

    "0.31415926535 10E1" est une représentation d'une approximation de pi, en virgule flottante, en base dix.


    Prenons le nombre 2.5 (en base dix).

    "2.5" est l'écriture de 2.5 en virgule fixe en base dix.

    "10.1" est l'écriture de 2.5 en virgule fixe en base deux

    "0.25 10E1" est l'écriture de 2.5 en virgule flottante en base dix

    "0.101 2E10" est l'écriture de 2.5 en virgule flottante en base deux
    </Cours de maths>

    Citation Envoyé par visiwi Voir le message
    Waou

    Je me suis probablement mal exprimé.
    Ce qui m'intéresse c'est la représentation direct, la notation, pas comment convertir une chaine en nombre, même si ce nombre est bien au final en base 2, 8 ou 16. je ne cherche pas à les manipuler mais a connaitre la déclaration en dur.
    string->number ne répond donc pas à ma préoccupation.

    Je cherche à savoir si il y a une notation qui permet de faire référence à un nombre à virgule flottante en les notant comme des litéraux (en dur) :

    par exemple en base 10 -> 10.545 -> (set! num 10.545)

    Existe-t-il la même chose en base 2, 8 et 16 ? Et si oui comment ?
    Et cela en R5RS.
    Ben... il suffit d'écrire (setq x 1011001.001010001)
    sous réserve que le reader lise en base deux.

    En Le_Lisp, on écrirait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ? (with ((ibase 2)) (setq x (read) y (read)))
    11.1
    10.1
    = 2.5
    ? x
    = 3.5
    ? y
    = 2.5
    ? (with ((obase 2)) (print x))
    11.1
    = 3.5
    Où est le problème?

    Attention!

    Il y a un piège!

    Si on écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ? (with ((ibase 2)) (setq x 11.1))
    = 11.1
    On obtient dans x : onze et un dixième!

    Car ibase n'agit que sur la lecture (reader).

    Or l'expression lue (avant évaluation) est '(with ((ibase 2)) (setq x 11.1))

    où les nombres "2" et "11.1" sont lus dans la base courante (dix)!

    L'autre possibilité est de changer plus définitivement la base de lecture courante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ? (ibase 2)
    = 2
    ? (setq x 11.1)
    = 3.5
    Mais attention! Pour revenir, il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ? (ibase 110)
    = 10
    ? (- x 3)
    = 0.5
    car dix s'écrit "110" en base deux !

    C'est clair, chef?

    Jacques

  7. #7
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    C'est très clair bien que les Math ne soient pas ma tasse de thé

    à toi d'avoir pris tout ce temps pour m'expliquer cela. C'est toi qui est un chef !

    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/05/2021, 15h33
  2. [FASM] Afficher un nombre à virgule flottante
    Par -Mod- dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 26/08/2008, 21h10
  3. nombre à virgule flottante
    Par new_wave dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2008, 11h16
  4. Réponses: 3
    Dernier message: 01/08/2007, 12h49

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