Logarithmus
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- Kaktus
- Tastatursteuerer
- Beiträge: 658
- Registriert: 17.02.2006, 01:45
- Wohnort: Wüstä
- Kontaktdaten:
Ich glaube standardmäßig gibt es in AGS keine Funktion dafür. Das heißt du musst entweder selber eine schreiben oder du benutzt das Plugin in hier ->http://www.bigbluecup.com/yabb/index.ph ... #msg147539, dass unter anderem eine Funktion für Logarithmen hinzufügt.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Hab mal was geschustert:
Die Funktion findet den Exponenten im Bereich -100 bis 100.
Beispiel:
Zehner-Logarithmus von 120:
Display("%f", log(10.0, 120.0);
Code: Alles auswählen
float log(float base, float x) {
float test=0.0;
float c;
int e=1;
float ten;
float res=0.0;
float found=0.0;
while (e>-8) { // bis 0.0000001
ten=Maths.RaiseToPower(10.0, IntToFloat(e));
if (e==1) c=-10.0*ten;
else c=0;
while(c<=11.0*ten) {
test=found+c;
res=Maths.RaiseToPower(base, test);
if (res==x) {
return test;
}
if (res>x) {
found=test-ten;
c=1000.0;
}
c=c+ten;
}
e--;
}
return test;
}
Beispiel:
Zehner-Logarithmus von 120:
Display("%f", log(10.0, 120.0);
Use gopher repellent on funny little man
- DasJan
- Adventure-Treff
- Beiträge: 14683
- Registriert: 17.02.2002, 17:34
- Wohnort: London
- Kontaktdaten:
@Khris: Das sieht aber esoterisch aus
Wikipedia gibt eine Reihe an, die recht schnell zu guten Ergebnissen kommen soll: Klick.
Das Jan
Wikipedia gibt eine Reihe an, die recht schnell zu guten Ergebnissen kommen soll: Klick.
Das Jan
"If you are the smartest person in the room, you are in the wrong room."
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Hehe, ich weiß, der Vorteil bei meiner Funktion ist halt, dass man nur durch Ändern von ein oder zwei Zeilen auch komplett andere Sachen ausrechnen kann, z.B. die x-te Wurzel, o.ä.
Die Reihe bei der wikipedia hab ich gesehen, hab mich aber dagegen entschieden.
AGS kann rekursive Funktionen, es geht also auch damit, aber AGS hat kein intern definiertes e, deswegen ist meine Methode genauer.
Für Echtzeit-3D würde ich meine Version nicht hernehmen, aber für den Rest sollte es reichen
Die Reihe bei der wikipedia hab ich gesehen, hab mich aber dagegen entschieden.
AGS kann rekursive Funktionen, es geht also auch damit, aber AGS hat kein intern definiertes e, deswegen ist meine Methode genauer.
Für Echtzeit-3D würde ich meine Version nicht hernehmen, aber für den Rest sollte es reichen
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DasJan
- Adventure-Treff
- Beiträge: 14683
- Registriert: 17.02.2002, 17:34
- Wohnort: London
- Kontaktdaten:
Das hat mit Rekursion nix zu tun. Du rechnest so viele Summanden aus, bis die dir klein genug sind, und fertig. Dreizeiler.khrismuc hat geschrieben:AGS kann rekursive Funktionen, es geht also auch damit, aber AGS hat kein intern definiertes e, deswegen ist meine Methode genauer.
e kommt doch gar nicht drin vorkhrismuc hat geschrieben:aber AGS hat kein intern definiertes e, deswegen ist meine Methode genauer.
Und genauer ist deine Methode sicher nicht. Da bekommst du ganz schnell fiese Überläufe, da du ständig base^test ausrechnest. Das fliegt dir sehr schnell um die Ohren.
Das Jan
"If you are the smartest person in the room, you are in the wrong room."
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Stimmt, ich brauch das e gar nicht, ich hab "Wie komme ich vom ln auf eine beliebige Basis" nicht zuende gedacht
Fiese Überläufe hab ich aber auch nicht bemerkt, und genau genug war es auch, z.B. hat mir log(3.45, 39403902.0) als Ergebnis 14.122852 (AGS kann nur 6 Nachkommastellen) geliefert, mein Taschenrechner spuckt 14,122851531 aus.
Poste doch mal den Dreizeiler, ich bin gespannt (und zu faul, es selbst zu coden ).
Fiese Überläufe hab ich aber auch nicht bemerkt, und genau genug war es auch, z.B. hat mir log(3.45, 39403902.0) als Ergebnis 14.122852 (AGS kann nur 6 Nachkommastellen) geliefert, mein Taschenrechner spuckt 14,122851531 aus.
Poste doch mal den Dreizeiler, ich bin gespannt (und zu faul, es selbst zu coden ).
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
Danke. Für mein ewig nicht fertig werdendes Zahnradrätsel brauch ich die mir wurde geraten, die zu erwartende Anzahl an Drehversuchen mit einem Logarithmus zu berechnen, um das Rätsel bei zu vielen Versuchen automatisch abbrechen zu lassen. Da Ausgangseinstellung ja immer zufällig gewählt wird, muss auch der Erwartungswert immer neu Berechnet werden.
Danke, Adventuretreff! <3
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Es gibt unterschiedliche Schreibweisen, log heißt oft auch der Zehnerlogarithmus, also der Logarithmus zur Basis 10.
log Abstand / log 2 wäre dann log(10.0, abstand) / log(10.0, 2.0), das ist dasselbe wie der Logarithmus des Abstandes zur Basis 2.
Also: log(2.0, abstand)
log Abstand / log 2 wäre dann log(10.0, abstand) / log(10.0, 2.0), das ist dasselbe wie der Logarithmus des Abstandes zur Basis 2.
Also: log(2.0, abstand)
Zuletzt geändert von KhrisMUC am 20.09.2006, 22:26, insgesamt 1-mal geändert.
Use gopher repellent on funny little man
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55
- DieFüchsin
- Adventure-Gott
- Beiträge: 4406
- Registriert: 12.03.2004, 16:55