Bonjour,
j'ai posté hier pensant avoir un pb dans mon programme et en fait cela ne vient pas de moi.
Voilà j'ai codé une appli C/C++ sur snowleopard avec Xcode et tout marchait pour le mieux.
En recondant le tout sous visual C++, bizarre, résultats aberrants.
En affinant mes recherches, j'ai finalement vu l'endroit ou cela coinçait mais aucune idée pour résoudre le problème.
Alors voila, j'ai une fonction simple, appelons la f définie comme suit dans mo programme sous Xcode
Les fonction C99 et donc 'erf' n'étant pas prises en charge sous VC++, je fais appel à boost, et la fonction reste la même à part que j'appelle boost::math::erf
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double f(double x){ return 0.5*(1-erf(x/sqrt(2))) }
Passons ensuite au résultats.
La fonction erf est une fonction définie sur tout R comme le montre
http://fr.wikipedia.org/wiki/Fichier:Erf_plot.svg
Déclarons
double a = -37.1326;
double b = -8.26506;
double ra = f(a);
double rb = f(b);
f(a) et f(b) sont donc très proches de 1
Si je fais des printf("%e", ra) et printf("%e",rb)
je vais voir s'afficher sur la console 1.000000e+00 sous Xcode et VC++
Maintenant, faisons la différence
double dif = f(a)-f(b);
et printf("%e",dif);
Sous Xcode on obtient 1.11022e-16, sous VC++ on obtient 0.000000e+000
VC++ m'enlève donc toute précision en faisant la différence. Mais d'un autre côté, pourquoi Xcode m'enlève-t-il également la précision sur l'affichage séparé de f(a) et f(b) et m'affiche quelquechose de correct pour la différence.
Toujours est-il que je dois avoir cette précision et que je n'ai pas la solution à ce pb
Merci a celui qui m'apportera une aide![]()
Partager