pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 2024
-
15 mars 2010 à 14:03
Samy -
6 févr. 2017 à 10:44
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 5 avril 2010 à 11:49
Je ne comprends pas le raisonnement ...
Quoi qu'il en soit, une precision de 10e-60 avec des double ne veut rien dire
tagtog
Messages postés7Date d'inscriptionmardi 17 février 2009StatutMembreDernière intervention20 juillet 2011 4 avril 2010 à 17:25
La fonction while(fabs(term)>epsilon) ne s'arrête pas quand la condition n'est pas fausse.
Donc, nous sommes arrivés à notre objectif d'accès à la valeur epsilon = 10^(-60).
Donc le problème en dehors de notre mains ^^.
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 31 mars 2010 à 12:54
Pour revenir a la "precision de 10e-60" ... c'est tout bonnement absurde d'affirmer cela :
Avec les doubles au maximum tu peux avoir 16 chiffres significatifs, donc la précision maximale est de 10e-16
Il ne faut pas confondre le fait que l'on puisse ecrire le nombre 10e-100 dans un double et le fait le nombre 1.000 000 000 000 000 1 * 10e-100 le soit aussi alors que 1.000 000 000 000 000 01 * 10e-100 (avec un 0 de plus) soit identique a 10e-100 !
Bref 10e+100 additionne avec 10e-100 n'a aucun sans dans l'arithmetique des flottants.
Pour finir, un petit retour sur des choses plus mathemtiques :
ton test d'arret est que fabs(term)<epsilon, cele ne veut absolument pas dire que l'ecart a la vraie valeur est plus petite d'epsilon, mais seulement que le dernier terme de la serie de Taylor est plus petit en module a epsilon.
Avec ce raisonnement il suffirait de prendre la serie harmonique somme 1/n et dire qu'il suffit de s'arreter quand n depasse 1/epsilon ... alors que la serie harmonique diverge (equivalent a ln(n)+constante d'Euler+...).
Donc morale de l'histoire ne pas confondre grandeur du dernier terme avec l'erreur commise sur l'approximation
cs_Jaboun
Messages postés3Date d'inscriptiondimanche 28 mars 2010StatutMembreDernière intervention11 décembre 2010 29 mars 2010 à 17:57
merci pour cette information de calculer log(x),
j'ai un exercice de la langage c slv:
Ecrire un programme pour la gestion de stock
le stock est identifier par nom,prix unitaire,stock,stock minimal.
les operations a gérer:
1.Ajouter un produit
2.Modifier un produit
3.Supprimer un produit
4.Rechercher un produit
5.trier les produits par prix unitaire
6.trier les produit par stock
7.liste des produits a commander
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 16 mars 2010 à 08:37
Ce n'est pas de epsilon dont je parlais mais de v. Teste en lui enlevant qlqs décimales.
fabs() du C n'a rien d'une fonction fournie, c'est juste l'encapsulge de:
FABS de la FPU.
Si tu compiles en x64 ou explicitement en SSE pour x86, c'est ANDPS ou ANDPD.
Dans les 2 cas, il n'y a rien de plus de mis dans ton binaire.
tagtog
Messages postés7Date d'inscriptionmardi 17 février 2009StatutMembreDernière intervention20 juillet 2011 15 mars 2010 à 23:09
Merci a tous ...
J'ai jouté la fonction:
fabs() = double absolu(double x) {return (x>=0?x:-x);}, par-ce-que je ne veux pas ajouter quelque chose depuis la bibliothèque cmath ou math.h.
Ce programme peut calculer logarithme [log(x) de la bib cmath] d'un nombre double, mais avec de précision souhaité (epsilon),
par exemple:
pour x=1.000001
log(1.000001)=9.9999999.10^(-7)// de la bib cmath.
Ln(1.000001)=9.9999999.10^(-7)// de la prog
mais quand on choizir par exemple x=1.000000000101
log(1.0000000001)=10^(-10) faut!!// depuis la bib cmath.
Ln(1.0000000001)=9.99999.10^(-11) // depuis le prog.
Donc notre prog donne nous la meilleur précision.
La gestion de précision est utile pour quelque problèmes physiques ou mathématiques.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 15 mars 2010 à 21:30
Compilé ça doit être identique.
fabs() serait encore plus court à écrire et on obtiendrait encore le meme binaire compilé.
Ecrire 60 decimales à un flottant est utile ???
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 15 mars 2010 à 19:36
Ta fonction absolu(x) peut se simplifier et devenir :
double absolu(double x) {return (x>=0?x:-x);}
pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 15 mars 2010 à 18:06
C'est mieux. Mais on peut simplifier. Voyez mon dernier envoi en message privé. pgl10
tagtog
Messages postés7Date d'inscriptionmardi 17 février 2009StatutMembreDernière intervention20 juillet 2011 15 mars 2010 à 17:39
Meci PGL10,
J'ai oublié aussi la valeur x=1!!!!
Le mise ajour calculé les autres valeurs, pour x=1, 4,8,16, ...
pgl10
Messages postés381Date d'inscriptionsamedi 18 décembre 2004StatutNon membreDernière intervention25 avril 202411 15 mars 2010 à 14:03
Attention, pour x = 4 ou 16 ou ... cela ne calcule pas ! Il faut programmer : while(x/2>=2) Bye,pgl10
6 févr. 2017 à 10:44
5 avril 2010 à 11:49
Quoi qu'il en soit, une precision de 10e-60 avec des double ne veut rien dire
4 avril 2010 à 17:25
Donc, nous sommes arrivés à notre objectif d'accès à la valeur epsilon = 10^(-60).
Donc le problème en dehors de notre mains ^^.
31 mars 2010 à 12:54
Avec les doubles au maximum tu peux avoir 16 chiffres significatifs, donc la précision maximale est de 10e-16
Il ne faut pas confondre le fait que l'on puisse ecrire le nombre 10e-100 dans un double et le fait le nombre 1.000 000 000 000 000 1 * 10e-100 le soit aussi alors que 1.000 000 000 000 000 01 * 10e-100 (avec un 0 de plus) soit identique a 10e-100 !
Bref 10e+100 additionne avec 10e-100 n'a aucun sans dans l'arithmetique des flottants.
Pour finir, un petit retour sur des choses plus mathemtiques :
ton test d'arret est que fabs(term)<epsilon, cele ne veut absolument pas dire que l'ecart a la vraie valeur est plus petite d'epsilon, mais seulement que le dernier terme de la serie de Taylor est plus petit en module a epsilon.
Avec ce raisonnement il suffirait de prendre la serie harmonique somme 1/n et dire qu'il suffit de s'arreter quand n depasse 1/epsilon ... alors que la serie harmonique diverge (equivalent a ln(n)+constante d'Euler+...).
Donc morale de l'histoire ne pas confondre grandeur du dernier terme avec l'erreur commise sur l'approximation
29 mars 2010 à 17:57
j'ai un exercice de la langage c slv:
Ecrire un programme pour la gestion de stock
le stock est identifier par nom,prix unitaire,stock,stock minimal.
les operations a gérer:
1.Ajouter un produit
2.Modifier un produit
3.Supprimer un produit
4.Rechercher un produit
5.trier les produits par prix unitaire
6.trier les produit par stock
7.liste des produits a commander
16 mars 2010 à 08:37
fabs() du C n'a rien d'une fonction fournie, c'est juste l'encapsulge de:
FABS de la FPU.
Si tu compiles en x64 ou explicitement en SSE pour x86, c'est ANDPS ou ANDPD.
Dans les 2 cas, il n'y a rien de plus de mis dans ton binaire.
15 mars 2010 à 23:09
J'ai jouté la fonction:
fabs() = double absolu(double x) {return (x>=0?x:-x);}, par-ce-que je ne veux pas ajouter quelque chose depuis la bibliothèque cmath ou math.h.
Ce programme peut calculer logarithme [log(x) de la bib cmath] d'un nombre double, mais avec de précision souhaité (epsilon),
par exemple:
pour x=1.000001
log(1.000001)=9.9999999.10^(-7)// de la bib cmath.
Ln(1.000001)=9.9999999.10^(-7)// de la prog
mais quand on choizir par exemple x=1.000000000101
log(1.0000000001)=10^(-10) faut!!// depuis la bib cmath.
Ln(1.0000000001)=9.99999.10^(-11) // depuis le prog.
Donc notre prog donne nous la meilleur précision.
La gestion de précision est utile pour quelque problèmes physiques ou mathématiques.
15 mars 2010 à 21:30
fabs() serait encore plus court à écrire et on obtiendrait encore le meme binaire compilé.
Ecrire 60 decimales à un flottant est utile ???
15 mars 2010 à 19:36
double absolu(double x) {return (x>=0?x:-x);}
15 mars 2010 à 18:06
15 mars 2010 à 17:39
J'ai oublié aussi la valeur x=1!!!!
Le mise ajour calculé les autres valeurs, pour x=1, 4,8,16, ...
15 mars 2010 à 14:03