Bonjour, Basile Starynkevitch, on 2021-10-24: > 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. Le petit programme ci-dessous permet de voir ce qu'il se passe : #include <stdio.h> int main(int argc, char *argv[]) { printf("double: %0.32f\n", (double)0.07 - (double)0.18); printf("float: %0.32f\n", (float)0.07 - (float)0.18); return (0); } Un fois compilé et exécuté, on retrouve les erreurs de précision issues des arrondis flottants mentionnés par Basile : double: -0.10999999999999998667732370449812 float: -0.11000000685453414916992187500000 Empiriquement, emacs ferait donc ses calculs en virgule flottante double précision, et SBCL en simple. Bonne journée, :) -- Étienne Mollier <emollier@emlwks999.eu> Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da Sent from /dev/pts/2, please excuse my verbosity.
Attachment:
signature.asc
Description: PGP signature