CALCULE LOG(X)

pgl10 Messages postés 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 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.

https://codes-sources.commentcamarche.net/source/51445-calcule-log-x

C cool
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
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és 7 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 20 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és 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
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és 3 Date d'inscription dimanche 28 mars 2010 Statut Membre Dernière intervention 11 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és 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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és 7 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 20 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és 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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és 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
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és 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 avril 2024 11
15 mars 2010 à 18:06
C'est mieux. Mais on peut simplifier. Voyez mon dernier envoi en message privé. pgl10
tagtog Messages postés 7 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 20 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és 381 Date d'inscription samedi 18 décembre 2004 Statut Non membre Dernière intervention 25 avril 2024 11
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
Rejoignez-nous