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 <emoll...@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

Reply via email to