Les fonctions cmath exp () et log () sont-elles toujours symésortingques?

Les fonctions cmath exp() et log() sont-elles toujours symésortingques?

Ergo si je le fais

 double x; double y = exp(log(x)); assert(x == y); 

l’assertion échouera-t-elle jamais, et dans ce cas: dans quelles circonstances? Nous pouvons supposer que x est un nombre rationnel> 0 .

Un log virgule flottante ne peut pas être un pour un. Il doit être monotone croissant et satisfaire log(64) > 4.15 et log(128) < 4.86 . Il y a 2 52 double entre 64 et 128, mais il y a moins de 2 50 double entre 4,15 et 4,86. Il existe plusieurs doubles dans cette plage avec le même logarithme à double précision, donc exp(log(x)) == x doit échouer pour au moins l'un d'entre eux.

Ils ne sont pas plus symésortingques que * et / . Lorsqu’il s’agit de nombres à virgule flottante, il y a des erreurs d’arrondi, de sorte que x et y peuvent différer dans le 15ème chiffre (ou plus).