On 24/10/2021 18:44, kaliderus wrote:[…]
J'avais déjà remarqué ce phénomène, et voici ce que me donne le résultat mentionné en objet
(- 0.07 0.18)
dans emacs : -0.10999999999999999
avec SBCL : -0.11000001
Si j'ai bonne mémoire, la norme Common Lisp impose le calcul en bignums ou nombres à précision arbitrairement grande.
Alors que GNU emacs utilise des flottants IEEE754.
Bonjour la liste,
J'avais déjà remarqué ce phénomène, et voici ce que me donne le résultat mentionné en objet
(- 0.07 0.18)
dans emacs : -0.10999999999999999
avec SBCL : -0.11000001
Quelqu'un saurait-il me dire pourquoi ?
Ce que je pourrai éventuellement comprendre avec des très grands
nombres par exemple, ou des valeurs franchement exotiques, mais avec
des valeurs qui doivent être réelles et qui ne dépassent pas la
capacité mémoire de la machine, chaque implémentation devrait me semble-t-il donner le même résultat, et qui plus est exact...
Je suis apprenti en common lisp.
Merci à chacun.
J'avais déjà remarqué ce phénomène, et voici ce que me donne le résultat mentionné en objet
(- 0.07 0.18)
dans emacs : -0.10999999999999999
avec SBCL : -0.11000001
Quelqu'un saurait-il me dire pourquoi ?
-0.109999999999999990.07-0.18
Si j'ai bonne mémoire, la norme Common Lisp impose le calcul en bignums
ou nombres à précision arbitrairement grande.
Alors que GNU emacs utilise des flottants IEEE754.
https://pages.lip6.fr/Christian.Queinnec/WWW/LiSP.html est une lecture conseillée.
Tu utilises un langage où les flottants sont des décimaux (ça doit
bien exister) ou tu utilises Python avec le module decimal.
Le 25/10/2021 00:42:11, kaliderus a écrit :
J'imaginais ce genre de chose :-/Tu utilises un langage où les flottants sont des décimaux (ça doit bien exister) ou tu utilises Python avec le module decimal.
Et donc si quelqu'un veut faire par exemple du bancaire derrière, ou
juste avoir un calcul exact (ce qui est mon cas), que lui conseiller ?
J'imagine utiliser une librairie adéquate (je n'ai pas encore
chercher), ou existe-t-il une solution au niveau du langage ?
J'imaginais ce genre de chose :-/
Et donc si quelqu'un veut faire par exemple du bancaire derrière, ou
juste avoir un calcul exact (ce qui est mon cas), que lui conseiller ? J'imagine utiliser une librairie adéquate (je n'ai pas encore
chercher), ou existe-t-il une solution au niveau du langage ?
salut,
Le Mon, Oct 25, 2021 at 08:14:04AM +0200, nicolas.patrois@gmail.com a écrit :
Tu utilises un langage où les flottants sont des décimaux (ça doitPuisqu'on est dans les scheme/lisp: c'est le cas de chicken:
bien exister) ou tu utilises Python avec le module decimal.
dpkg -S $(realpath $(which csi ))
chicken-bin: /usr/bin/csi
<<. csi
(display (- 0.07 .11))
.
CHICKEN
(c) 2008-2020, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 5.2.0 (rev 317468e4)
linux-unix-gnu-x86-64 [ 64bit dload ptables ]
-0.04
mais pour faire des maths, j'ai une grosse préférence pour raku (https://raku.org/)
* les fractions sont conservées sous la forme de fraction
* les metaoperators simplifient vraiment le boulot
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 286 |
Nodes: | 16 (3 / 13) |
Uptime: | 86:14:37 |
Calls: | 6,496 |
Calls today: | 7 |
Files: | 12,099 |
Messages: | 5,277,030 |