2009-05-21 7 views
9

Ich habe versucht, für Logarithmus + Objective-c-Suche, aber alles, was ich bekommen ist Mathe Testseiten von Lehrern oder Erklärungen, was ein Logarithmus ist;)Welche Art von Logarithmusfunktionen/Methoden gibt es in objective-c/cacao-touch?

Ich habe einige Messungen bekam, die wie 83912,41234 sind und andere sind 32,94232. Ich muss dieses riesige Spektrum in etwas zwischen 0 und 100 herunterdrücken, und dass 32.94232 mindestens etwas größer als 2 sein müsste, wo das 83912.41234 etwas in der Nähe von 100 wäre. Also denke ich, dass eine Logarithmusfunktion mein Freund hier sein wird.

UPDATE: Ich habe kam über die math.h-Datei über "Open Schnell" (sehr schön Befehl in Xcode: SHIFT + CMD + D), und da große Überraschung:

extern double log (double); 
extern float logf (float); 

extern double log10 (double); 
extern float log10f (float); 

extern double log2 (double); 
extern float log2f (float); 

extern double log1p (double); 
extern float log1pf (float); 

extern double logb (double); 
extern float logbf (float); 

Aber : Kein Text, keine Kommentare. Ich bin nicht so ein Mathe-Freak. So wäre eine Beschreibung gut, d. H. Welche Art von Logarithmus für welchen Fall, wie die Kurve aussieht, usw. ... so werden alle großen Links sehr geschätzt!

+0

Sie für die Resultate sind auf einer Kurve oder einer geraden Linie sein? – Abizern

+0

Ich muss es ausprobieren, aber im Moment denke ich, es ist eine Kurve. log2() scheint gut zu sein, aber es scheint auch, dass es eine sehr teure Berechnung ist. – Thanks

+0

Teuer in welcher Weise? – Abizern

Antwort

1

Wie wäre es mit einem Buch über C-Standard-Bibliotheksfunktionen?

Sie können aber man-Seiten versuchen: man 3 logf, zum Beispiel

2

math.h ein Standard gehören. die wikipedia Seite hat einige Dokumentation.

Eine weitere Möglichkeit, die Werte zu "quetschen", besteht darin, Ihre Werte auf eine gerade Linie zu bringen. Sie zum Beispiel:

Gerade Gleichung

y = mx + c 
y = 'squished' value. 
x = The value you want to squish 
m = Gradient of the line 
c = intercept on the y axis 

Eine schnelle Berechnung auf Werte gibt so etwas wie:

y = 1.17e-3 x + 1.96 

Hoffnung, das hilft.

+0

+1 für den Wiki-Link ... hätte nie gedacht –

14

Auch einen Logarithmus mit einer beliebigen Basis bekommen:

float logx(float value, float base) 
{ 
    return log10f(value)/log10f(base); 
}