Code source de log10 (x)

Signaler
Messages postés
3
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
10 août 2004
-
Messages postés
59
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
1 septembre 2004
-
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.
A voir également:

7 réponses

Messages postés
59
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
1 septembre 2004

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].
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
3
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
10 août 2004

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-)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Ces instructions sont au pur standard Intel.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
59
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
1 septembre 2004

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 !
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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+ ;)
Messages postés
59
Date d'inscription
jeudi 1 juillet 2004
Statut
Membre
Dernière intervention
1 septembre 2004

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 !