[PHP] Frage wegen Berechnung

atlan428

Well-known member
ID: 43536
L
13 Mai 2006
269
10
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?
 
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
 
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)
 
@ 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?
 
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.
 
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))
 
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
 
@ Bububoomt

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


@ MrToiz

Auch vielen Dank für deine Mühe!