natürlicher logarithmus c

Gast #591783
Lesenswert?

Hallo

ich möchte von einer zahl den natürlichen logarithmus ln(x) berechnen 
und das in c.
Nun stellt ja die math.h so eine funktion zur verfügung. diese funktion
wird aber extrem viel rechenzeit verschwenden.

gibt es einen einfacheren ansatz um an das gewünschte ergebniss zu 
kommen?

gruss tobias
#591788
Lesenswert?

tobias hofer wrote:
> Hallo
>
> ich möchte von einer zahl den natürlichen logarithmus ln(x) berechnen
> und das in c.
> Nun stellt ja die math.h so eine funktion zur verfügung. diese funktion
> wird aber extrem viel rechenzeit verschwenden.

Warum denkst du, dass da Rechenzeit 'verschwendet' wird?

>
> gibt es einen einfacheren ansatz um an das gewünschte ergebniss zu
> kommen?

Wenn es einen einfacheren Ansatz gäbe, denkst du nicht, daß
die Leute die deine C-Bibliothek gemacht haben, ihn verwenden
würden?
#591791
Lesenswert?

tobias hofer wrote:
> gibt es einen einfacheren ansatz um an das gewünschte ergebniss zu
> kommen?
Einfacher nicht, aber evtl. mit deutlich weniger Verarbeitungszeit, 
indem man mit einer Tabelle (Look-Up-Table) arbeitet. Da sind allerdings 
dem Wertebereich bzw. der Auflösung durch die Größe des verfügbaren 
Speichers Grenzen gesetzt. Wenn Du allerdings nicht jeden Wert ganz 
genau brauchst, sondern evtl. nur "Stützwerte", zwischen denen man 
linear interpolieren kann, ist ne Tabelle wahrscheinlich das Richtige.

EDIT:
Ansonsten kann ich Karl Heinz (wie immer) nur zustimmen...
Gast #591796
Lesenswert?

> Wenn es einen einfacheren Ansatz gäbe, denkst du nicht, daß
> die Leute die deine C-Bibliothek gemacht haben ihn verwenden
> würden?

es gibt einfachere ansätze für (integer typen).
wie es geht steht z.b. in dem buch 'hackers delight'.
für fliesskomma gibt es auch schnelle algos.
sucht mal im web nach methoden, die die alten taschenrechner angewendet 
haben.
:)
Gast #591816
Lesenswert?

Ja, es gibt kuerzere Algorithmen, wenn man den Bereich einschraenken 
und/oder die Genauigkeit einschraenken kann. Wenn man den log im 
interessanten Bereich als Taylorreihe mit wenigen Gliedern entwickeln 
kann und dabei noch auf Integer abbildet, kann man moeglicherweise etwas 
sparen.
(Firma: ZeuSWarE GmbH) #591824
Lesenswert?

Es gibt eine reihenentwicklung für die Ln fkt,..

natürlich brauchst du den limes net berechnen, besonders da dein rechner 
nur eine gewisse genauigkeit aufweist, danach wählst du einfach dein 
n,..

grüüüße
Gast #591875
Lesenswert?

> Es gibt eine reihenentwicklung für die Ln fkt,..

Genau die Potenzreihenentwicklungen sind in den entspr. Bibliotheken 
ziemlich effektiv programmiert. I.d. Regel unter Berücksichtigung der 
Rechengenauigkeit.

Gruß
Nils
Gast #591890
Lesenswert?

Hallo Kai,

> Ja schön,.. anscheinend möchte er es aber selber machen,..

Zitat aus der Anfrage:
> gibt es einen einfacheren ansatz um an das gewünschte ergebniss zu kommen?

Die Potenzreihenentwicklung läuft aber genau auf die Umsetzung hinaus, 
die in der Bibliothek verwendet wird. Insbesondere dann, wenn man das n 
in Abhängigkeit von der gewünschten Genauigkeit und abhängig von x 
wählt.

Die (werteabhägigen) Näherungsverfahren (Look-Up-Table mit linearer 
Interpolation und Taylorentwicklung) wurden ja bereits erwähnt.

Gruß
Nils
Gast #591972
Lesenswert?

> ... wenn man seinen Wertebereich kennt und mit Integern rechnet ..

Genau das ist der Punkt:
Da der Logaritmus mit entsprechender Potenz alles glättet, müsste man 
wissen:
- wo liegt das zeitkritische Moment?
- was ist der Wertebereich?
- was die angestrebte Genauigkeit?

Normierung auf Integer ist ein Weg, unter Berücksichtigung von 
Funktionalgleichung und Basis:
1) ln(a) + ln (b) = ln (ab)
2) LOG a x = (1/ln a) ln x, mit a = Basis

@tobias: Was ist die konkrete Aufgabenstellung?

Gruß
Nils
Gast #592039
Lesenswert?

Hallo Nils

Besten Dank fr all die Infos. Ich möchte einfach den natürlichen 
Logarithmus berechnen mit möglichst wenig Rechenaufwand. Im weiteren ist 
es ja auch mathematisch sehr interessant welche verfahren und wege es 
gibt.

Klar die Genauigkeit darf darunter leiden.


Beste Grüsse

Tobias
Gast #592047
Lesenswert?

Tobias,
ein Weg geht ueber den 2er Log. Zuerst kommt die Normalisierung. Das 
heisst wieviele Shifts benoetigt man, bis die hoechste Stelle Eins ist. 
Dann kommt die Gewichtung der vorhandenen Stellen.
Gast #592066
Lesenswert?

Hatte das gleiche Problem wie du, habe es mit Hilfe dieses Forums dann 
durch eine Tabelle mit vorher berechneten Werten gelöst und dazwischen 
interpoliert. Genauergesagt habe ich 2 Tabellen benutzt, eine für kleine 
Werte mit kleinen Werteschritten, und eine mit großen Werten mit großen 
Werteschritten.
Habe dies zur Kennlinienberechnung benutzt, und gang passable Ergebnise 
erreicht.
Die ist natürlich nur möglich, wenn du deinen Wertebereich genau 
einschränken kannst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren