Code source de log10 (x)

laurentrupin Messages postés 3 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 10 août 2004 - 30 juil. 2004 à 11:05
pinderlot Messages postés 59 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 1 septembre 2004 - 2 août 2004 à 09:07
Bonjour,

Dans le cadre d'une application embarquée, j'ai besoin de la fonction log10 (x) mais je ne peux pas utiliser la fonction de math.h car dans ce cas, toutes les fonctions de cette librairie sont chargées dans le chip. C'est trop lourd, je manque de place.

Quelqu'un connait-il le code source de cette fonction ?

Merci.

7 réponses

pinderlot Messages postés 59 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 1 septembre 2004 1
30 juil. 2004 à 13:15
log10 (x) = ln (x) / ln (10) = 0.43429 * ln (x)

pour le logorithme népérien, tu peux utiliser les développements en séries entières. autour de 0 ln (1+x) = somme [(-1*x)xy n / n].
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 juil. 2004 à 14:10
Si ton compilo accepte ce discours et que pas de prob sur de l'embarque:

__declspec(naked) double __stdcall bnLog10(double dbl)
{
__asm {
fld1
fld qword ptr[esp+4]
fldlg2
fxch st(1)
fyl2x
ret 8
}
}

ciao...
BruNews, Admin CS, MVP Visual C++
0
laurentrupin Messages postés 3 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 10 août 2004
30 juil. 2004 à 14:33
Merci pour ces réponses.

Mon compilo accepte l'assembleur mais il ne connait pas ces instructions.

Quand vous dîtes autour de 0, est ce que ça veut dire que le développement en séries entières est vraie uniquement lorsque x est proche de 0 ?

Merci.

8-)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 juil. 2004 à 15:17
Ces instructions sont au pur standard Intel.

ciao...
BruNews, Admin CS, MVP Visual C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pinderlot Messages postés 59 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 1 septembre 2004 1
30 juil. 2004 à 15:33
pour la fonction ln, le développement en série entière n'est vrai qu'entre -1 et +1 exclus. Et en plus, il ne s'applique qu'à la fonction ln (1+x) et non ln (x).

après tu peux utiliser le fait que ln (a * b) = ln a + ln b.

-----------------------------------------------
Tout ce qui ne tue pas rend plus fort !
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
30 juil. 2004 à 15:34
va voir la : http://cppfrance.com/forum.v2.aspx?ID=219123. vecchio se demandait déja comment coder la fonction ln. (et toi log10(x), c'est ln(x)/ln(10))

a+ ;)
0
pinderlot Messages postés 59 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 1 septembre 2004 1
2 août 2004 à 09:07
une autre solution pour la fonction ln, c'est de passer par les intégrales : ln (x) = intégrale [1, x] de 1/u.

ensuite, pour calculer l'intégrale, on utilise des méthodes de sommes de rectangles, etc. cela revient à calculer l'aire approchée sous une courbe.
-----------------------------------------------
Tout ce qui ne tue pas rend plus fort !
0
Rejoignez-nous