Alt 05.01.2007, 13:01:44   #1 (permalink)
atlan428
Erfahrener Benutzer
Benutzerbild von atlan428

ID: 43536
Lose senden

atlan428 eine Nachricht über ICQ schicken atlan428 eine Nachricht über MSN schicken
Reg: 13.05.2006
Beiträge: 272
Standard [PHP] Frage wegen Berechnung

Ich habe für mein Browsergame einen Marktplatz programmiert. Bei diesem kann man Rohstoffe für Goldmünzen kaufen und je nach Anzahl steigt der Kurs der Rohstoffe an. Beispiel:

1 Eisen kostet 0,22012048 GM
Differenz pro gekaufen Rohstoff: 0,00000001 GM

Der User käuft jetzt 3 Eisen:
0,22012048 GM
+0,22012049 GM
+0,22012050 GM
= 0,66036147 GM

Um den Endpreis zu berechnen muss ich das in eine Schleife (i<anzahl) packen und dann habe ich das Ergebnis. Leider dauert das extrem lang, wenn man z. B. 5.000.000 Rohstoffe käuft. Wie kann man das vereinfachen oder gibt es dafür eine Formel?
 
atlan428 ist offline   Mit Zitat antworten
Alt 05.01.2007, 13:13:09   #2 (permalink)
strolch00
redraft.de

ID: 155297
Lose senden

strolch00 eine Nachricht über ICQ schicken
Reg: 21.04.2006
Beiträge: 1.684
Standard

0,022... GM * gekaufeter anzahl ^^

* edit nicht gesehen mit der differenz aber du bist trotzdem schneller wenn du das mit (0,22012048 GM * 3) + (0,00000001 * 3) berechnest
strolch00 ist offline   Mit Zitat antworten
Alt 05.01.2007, 13:15:46   #3 (permalink)
Bububoomt PREMIUM-User
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose senden
Krank

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 19.677
Standard

Der Preis ist doch nciht de gleiche...

ähm möglichkeit gibt es, muß ich aber mal selber überlegen. Das sowas wie
Anzahl *grundpreis + (erhöhung*??)

überlgen gehe...

edit*

Anzahl *grundpreis + (erhöhung*FAKULTÄT der ANZAHL)
Bububoomt ist offline   Mit Zitat antworten
Alt 05.01.2007, 14:11:39   #4 (permalink)
atlan428
Erfahrener Benutzer
Benutzerbild von atlan428

ID: 43536
Lose senden

atlan428 eine Nachricht über ICQ schicken atlan428 eine Nachricht über MSN schicken
Reg: 13.05.2006
Beiträge: 272
Standard

@ strolch00

Die Lösung ist mir auch schon eingefallen, aber damit ist eine Beeinflussung des Marktes möglich und die beiden Ergebnisse stimmen nicht überein.


@ Bububoomt

Geht das wirklich mit der Fakultät? Gibt es dafür eine Funktion in PHP und ist das wirklich schneller?
 
atlan428 ist offline Threadstarter   Mit Zitat antworten
Alt 05.01.2007, 14:27:58   #5 (permalink)
strolch00
redraft.de

ID: 155297
Lose senden

strolch00 eine Nachricht über ICQ schicken
Reg: 21.04.2006
Beiträge: 1.684
Standard

Zitat:
aber damit ist eine Beeinflussung des Marktes möglich und die beiden Ergebnisse stimmen nicht überein
Was meinst du damit?
strolch00 ist offline   Mit Zitat antworten
Alt 05.01.2007, 14:37:21   #6 (permalink)
atlan428
Erfahrener Benutzer
Benutzerbild von atlan428

ID: 43536
Lose senden

atlan428 eine Nachricht über ICQ schicken atlan428 eine Nachricht über MSN schicken
Reg: 13.05.2006
Beiträge: 272
Standard

Man kann mit deiner Formel 10x 1 Rohstoff kaufen. Dann steigt der Kurs entsprechend an. Wenn man jetzt 1x 10 Rohstoffe verkauft, dann macht man einen Gewinn. Wenn man das jetzt auf eine Million Rohstoffe hochrechnet, dann ist der Gewinn riesig.
 
atlan428 ist offline Threadstarter   Mit Zitat antworten
Alt 05.01.2007, 14:40:41   #7 (permalink)
Bububoomt PREMIUM-User
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose senden
Krank

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 19.677
Standard

Sorry, fakultä war falsch. Das ja 1*2*3*4 nicht 1+2+3+4...

1+2+3+4 = (n*n)/2+ n/2 = (n*n+n)/2

das mußt du dann stat der Fakultät nehmen.

habe mich da vertan.

Also:

Anzahl *grundpreis + (Erhöhung*((Anzahl*Anzahl+Anzahl)/2))
Bububoomt ist offline   Mit Zitat antworten
Alt 05.01.2007, 14:48:12   #8 (permalink)
MrToiz
Erfahrener Benutzer

ID: 72115
Lose senden

Reg: 28.04.2006
Beiträge: 769
Standard

Zitat:
Zitat von atlan428 Beitrag anzeigen
1 Eisen kostet 0,22012048 GM
Differenz pro gekaufen Rohstoff: 0,00000001 GM

Der User käuft jetzt 3 Eisen:
0,22012048 GM
+0,22012049 GM
+0,22012050 GM
= 0,66036147 GM
Das lässt sich doch auch schreiben als

0
+ 0,22012048 + 0
+ 0,22012048 + 1
+ 0,22012048 + 2
=3*0,22012048+3
=0,66036147

Oder für n Eisen
0
+ 0,22012048 + 0 * 0,00000001
+ 0,22012048 + 1 * 0,00000001
+ 0,22012048 + 2 * 0,00000001
...
+ 0,22012048 + (n-1) * 0,00000001
=n*0,22012048+(1+2+...+n-1)*0,00000001

Mit ein bisschen Überlegen und Ausprobieren oder durch Nachschlagen in der Formelsammlung findet man:
1+2+...+n = n(n+1)/2
=> 1+2+...+(n-1) = (n(n+1)/2) - n

Deine gesuchte Funktion für die Kosten ist also
K(n) = n*0,22012048 + ((n(n+1)/2) - n)*0,00000001
Oder vereinfacht: K(n) = n(n + 44024095) / 200000000

HTH
MrToiz
 
MrToiz ist offline   Mit Zitat antworten
Alt 05.01.2007, 14:48:44   #9 (permalink)
atlan428
Erfahrener Benutzer
Benutzerbild von atlan428

ID: 43536
Lose senden

atlan428 eine Nachricht über ICQ schicken atlan428 eine Nachricht über MSN schicken
Reg: 13.05.2006
Beiträge: 272
Standard

@ Bububoomt

Danke für deine Hilfe! Die Rechnung scheint richtig zu funktionieren.


@ MrToiz

Auch vielen Dank für deine Mühe!
 
atlan428 ist offline Threadstarter   Mit Zitat antworten
Antwort

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage wegen Festplatte dRago Hardware 6 16.07.2006 09:37:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39:39 Uhr.