PHP: Zufallsberechnungen - Erklärungshilfe

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

PHP: Zufallsberechnungen - Erklärungshilfe

Beitrag von Dungeonwatcher »

'n Abend! :cool:

Ich bräuchte bitte mal Hilfe beim verstehen eines Code Blockes im Vault Mod.

Dieser Code Block ist mir nicht ganz klar:

Code: Alles auswählen

if ( $vault_general['stock_min_change'] > $vault_general['stock_max_change'] )
{
	$vault_general['stock_min_change'] = $vault_general['stock_max_change'];
}
$variation = mt_rand($vault_general['stock_min_change'] , $vault_general['stock_max_change']);
$hazard = mt_rand(1,2);
if ( $hazard == '2' )
{
	$variation = - $variation ;
}
$new_price = round(($exchange[$i]['stock_price'] * ( 1 + ( $variation / 100 ))), 2);
Hier wird per Zufall festgelegt ob eine Aktie im Wert steigt, fällt oder gleich bleibt. Hierbei bedeuten:

stock_min_change = min. Prozentsatz die sich der aktuelle Wert ändern darf
stock_max_change = max. Prozentsatz die sich der aktuelle Wert ändern darf

Was bewirken die folgenden Zeilen nun?
Wenn stock_min_change größer stock_max_change das dann stock_min_change gleich stock_max_change ist?

Code: Alles auswählen

if ( $vault_general['stock_min_change'] > $vault_general['stock_max_change'] )
{
	$vault_general['stock_min_change'] = $vault_general['stock_max_change'];
}
Als Ergebnis wird dann mit

Code: Alles auswählen

$variation = mt_rand($vault_general['stock_min_change'] , $vault_general['stock_max_change']);
festgelegt wird zwischen welchen Werten sich die Änderung bewegen darf.

Mit

Code: Alles auswählen

$hazard = mt_rand(1,2);
wird dann zwischen den beiden Werten per Zufall (mt_rand()) entschieden.

Wenn dann der Zufallsgenerator sich für die 2 entscheidet, tritt dies in Kraft

Code: Alles auswählen

if ( $hazard == '2' )
{
	$variation = - $variation ;
}
Was passiert in diesem Bereich?
Wie wird entschieden ob der Wert steigt oder fällt?
Was passiert wenn sich der Zufallsgenerator für 1 entscheidet? Im Quellcode gibt's diese Möglichkeit nicht.

Mit

Code: Alles auswählen

	$new_price = round(($exchange[$i]['stock_price'] * ( 1 + ( $variation / 100 ))), 2);
wird dann der der neue Preis berechnet.

Bye
Zuletzt geändert von Dungeonwatcher am So 18.Jan, 2009 22:00, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Was soll hieran nicht verständlich sein?

Code: Alles auswählen

if ( $vault_general['stock_min_change'] > $vault_general['stock_max_change'] )
{
	$vault_general['stock_min_change'] = $vault_general['stock_max_change'];
}
Hiermit wird zunächst geprüft, ob der Mindestwert über dem Maximalwert liegt und ansonsten gleich gesetzt.
Macht ja logisch auch Sinn.

Code: Alles auswählen

$variation = mt_rand($vault_general['stock_min_change'] , $vault_general['stock_max_change']);
Diese Zufallszahl bestimmt, in wieweit sich der Kurs ändert, also mit einer Ganzzahl zwischen "stock_min_change" und "stock_max_change", beide Werte dabei eingeschlossen.

Code: Alles auswählen

$hazard = mt_rand(1,2);
Eine weitere Zufallsentscheidung zwischen 1 und 2, die ...

Code: Alles auswählen

if ( $hazard == '2' )
{
	$variation = - $variation ;
}
... hier nun den zuvor ermittelten neuen Wert als Aufschlag (eben die unveränderte - und damit positive - Zahl) oder als Abschlag (wenn eben die 2. Zufallszahl eine 2 ist - es wird dann eben "nur" das Vorzeichen umgedreht) einstellt.

Code: Alles auswählen

$new_price = round(($exchange[$i]['stock_price'] * ( 1 + ( $variation / 100 ))), 2);
Und nun setze mal diese Formel mit Werten zusammen, dann erübrigt sich die Frage nach $hazard = 1 ;)

BTW:
Diese Frage bezieht sich nicht auf die Zufallszahlgenerierung in PHP alleine, sondern die Erklärung eines Code-Abschnittes in einem MOD. Daher verschiebe ich das Topic an seine neue Stelle !!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

[quote="oxpus";p="88115"]Was soll hieran nicht verständlich sein?[/quote]

Einfach ist es immer dann wenn man es weiss. ;)
Und nun setze mal diese Formel mit Werten zusammen, dann erübrigt sich die Frage nach $hazard = 1 ;)
Jou. :)

THNX
Antworten