[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: emacs lisp et (- 0.07 0.18) et aussi SBCL



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


Reply to: