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 <
[email protected]>
Fingerprint: 8f91 b227 c7d6 f2b1 948c 8236 793c f67e 8f0d 11da
Sent from /dev/pts/2, please excuse my verbosity.
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEj5GyJ8fW8rGUjII2eTz2fo8NEdoFAmF1kpUACgkQeTz2fo8N EdpXcA//bYhrh6L19ym/JiWI5cAqHW08XnLW9O15ZGcubtl6ETkon08+DIiIaBWO HnVZfhJTc8VwM0GGF+PBkLuFRizn7ZROu/feViK6Y9m2BjTqZBGlSThC6aADmg0r m1IhC5M3aq/ffG5lS5r17HVjCPb+ro8rBv2JalpQNmYyNDYP3z/QGhjuiBXTxYdu gZpa3Zcvjx2A8ZuB5frZHAbh3JQed/upjjCXWwsvntwc77v/Lohz0I1vkJR00Co1 Urr0FYtaCTParlFsqLKPFODYJqceGaf/gbf9qhol4XeP1ZzvbRTISpLtY5T7Oe+5 9qrvvZ8IACGznOEfv9C0E1CVlRcadwAhiqs9hZPhmTqn3R0c1sb7jhOFXXtt0+75 nzjJYq4bNKClRYKoDv4cuvtmnzSzEMSVuNOCNgYUKT1L7u5/niTeZW5W7c0IK6b4 K0Alt58jxANT1zdSHow5odzRBItifmxuRsALOJrWaldsiYynIcnSG5MvBfLK/wfp R/Na1JKF01WuOslU1edIvF/+IAn4a8BYcjQSqWKC2Ov1NXprG3czXr3/nJ/AEyMH zjRs6MfklXGjM/+zn5gq5rub2W2P7rH7/a+bhJ5DuAOL/lGK7+NHdx0hzSrC4jsw c6sd5j1gp1XDYctpkeh4BtFPFJ/NCuk6in/nKQ7KxJhb5oDa52M=
=kvgb
-----END PGP SIGNATURE-----
--- Sou