anpera.net
http://anpera.homeip.net/phpbb3/

zufallszahlen in logd
http://anpera.homeip.net/phpbb3/viewtopic.php?f=25&t=4927
Seite 3 von 3

Autor:  Eliwood [ Mo 20 Jul, 2009 09:04 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

Du teilst eine Zahl durch 10 und fragst dich, warum dabei eine Fliesskommazahl herauskommt? ;) Entweder castest du das Ergebnis mit (int) um, wenn du wirklich einen Integer willst, oder du rundest das Ergebnis mit round($float, 0); oder du rundest ab mit floor($float); oder du rundest auf mit ceil($float);
Dass du "nur" Zahlen mit einer Vorkommastelle findest (Ich nehm mal an, du meinst mit Vorkommastelle 1-9) ist auch logisch und nennt sich Häufigkeit... 1-9 ist halt etwa 9x so häufig als 0.

Oder du lebst mit der Fliesskommazahl und änderst das Datenbankfeld von int auf float.

Autor:  Rohen [ Mo 20 Jul, 2009 09:16 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

aus dem code ist nicht ersichtlich, wieso der Wert zu klein ist.
Schieb das ganze mal in eine Variable und lass dir diese ausgeben.
Es besteht die Möglichkeit, dass das Datenbankfeld zu klein ist?

Autor:  drimatu [ Mo 20 Jul, 2009 10:33 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

ok, dann alles:

create.php:
$arr = array();
if ( $_POST['sex'] ) {
$arr['moc'] = mt_rand( 1000 , 2500 ) /100;
}
else {
$arr['moc'] = mt_rand( 900 , 1800 ) /100;
}
$strmoc = serialize( $arr );

eine testausgabe in der village.php funktioniert fehlerlos. jedoch werden nur zahlen wie 1,94 oder 6,14 erstellt.
und wenn männlich und als zufallszahl mindestens 1000 ausgegeben wird ist diese durch 100 geteilt doch immernoch mindestens 10?

und sorry, was ist eine Fliesskommazahl? (mathe=3,6) mfg

Autor:  Kevz [ Mo 20 Jul, 2009 11:26 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

Möp!

Das Problem liegt hier:
PHP:
mt_rand( 900 , 1800 ) /100;


Du legst eine Zufallswert von 900 bis 1800 fest, der wird anschließend durch 100 dividiert. Das heißt bei einem Wert von 922 durch 100 ist das 9,22. ;-)

Du siehst also wo das Problem ist? Es fängt bei < 1000 an. Ersetze die 900 durch einen Wert ab 1000 und höher, dann Funktioniert es einwandfrei.

Autor:  Rohen [ Mo 20 Jul, 2009 11:29 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

Eliwood hat geschrieben:
Du teilst eine Zahl durch 10 und fragst dich, warum dabei eine Fliesskommazahl herauskommt? ;) Entweder castest du das Ergebnis mit (int) um, wenn du wirklich einen Integer willst, oder du rundest das Ergebnis mit round($float, 0); oder du rundest ab mit floor($float); oder du rundest auf mit ceil($float);
Dass du "nur" Zahlen mit einer Vorkommastelle findest (Ich nehm mal an, du meinst mit Vorkommastelle 1-9) ist auch logisch und nennt sich Häufigkeit... 1-9 ist halt etwa 9x so häufig als 0.

Oder du lebst mit der Fliesskommazahl und änderst das Datenbankfeld von int auf float.


Naja in seinem Beispiel düfte die kleinste, erreichbare Zahl aber bei 9.00 und die größte bei 25.00 liegen. 1.64 sind da quasi nicht möglich.
(In meinen Tests kam das auch nicht vor.)

Autor:  drimatu [ Mo 20 Jul, 2009 11:52 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

*kopfschüttel* sorry ... nun funktioniert es. ich hab zwar keine ahnung was ich verändert haben soll (vor einer halben stunde funktionierte es so wie oben beschrieben), nun gibt er zahlen wie 12.31 oder 13.95 aus.
trotzdem danke @all.

bleibt trotzdem noch die ausgabe in der vital info.
.templatereplace("statrow",array("title"=>"mocgröße","value"=>$u['moc']))
reicht ja nicht.
mfg und nochmal tschuldigung!

Autor:  Minerva [ Mo 20 Jul, 2009 12:14 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

warum nutzt du eigentlich ein array? ist doch vollkommen unsinnig oo
mein vorschlag: speicher das ganz normal in nem db feld ab, also nicht als array... ist ja eh nur ein wert drinnen und dann ist die ausgabe auch wieder viel einfacher...
arrays werden nur benötigt wenn man mehrere daten in einem Feld haben will (sprich: verteilung der drachenpunkte und prefs)
da du da ja nur eine sache speicherst kannst du auch gleich das array weglassen..
kein serialize mehr nötig... *zumindest wenn cihs richtig verstanden habe*

just my 2 cents
minerva

Autor:  Salator [ Di 21 Jul, 2009 02:16 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

Also nach der Beschreibung soll ja mt_rand(min,max) eine Zufallszahl zwischen min und max liefern. Von der Seite sehe ich erstmal nichts falsches.
Wie siehts denn mit der Initialisierung des Zufallsgenerators aus? Der Zufall ist nämlich gar nicht zufällig sondern wird irgendwie -meist in Verbindung mit der Zeit- berechnet. Da wäre es nun möglich, dass immer nahezu identische Zufallswerte kommen.
Wieso nimmst du eigentlich nicht die Funktion e_rand?
Und allgemein zur Fehlersuche ist es hilfreich, Kontroll-Outputs einzubauen, damit du den Wert von diversen Variablen an unterschiedlichen Verarbeitungszuständen siehst.

Noch eine Anmerkung zum prefs-Array: Das wird von der common bei jedem Seitenabruf unserialisiert und am Ende wieder serialisiert. Optimal ist das mit Sicherheit nicht, aber da an vielen Stellen das Vorhandensein der Werte erwartet wird bleibts halt so.

Autor:  Auric [ Di 21 Jul, 2009 09:33 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

... vielleicht weil e_rand gar nicht die gewünschte Verteilung liefert - siehe dazu auch diesen Thread.

Autor:  drimatu [ Di 21 Jul, 2009 11:50 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

hallo, ich habe das genommen weil ich es als einstigstes gefunden und vor allem auch verstanden habe. beabsichtigt wird die ausgabe einer zufallszahl zwischen 10 und 25, wo die wahrscheinlichkeit mittlere zahlen zu erhalten größer ist, die zahlen 10-11 und 24-25 jedoch nicht unmöglich sind.
ps.: wie gesagt funktionieren die zufallszahlen nun wie gewünscht, bleibt noch die frage wie eine anzeige der zufallszahl in der vital info angezeigt wird, bzw. wie es in der create.php ohne array gemacht werden kann, da es ja nicht in prefs, sondern einem eigenen db-feld gespeichert wird. mfg

ps2.: der fehler, warum anfangs keine zahlen mit 2 vorkommastellen 1000/100=10 ausgegeben wurden war dass leerzeichen bei /100
mt_rand(1000 , 2500) / 100;

Autor:  Kevz [ Di 21 Jul, 2009 11:57 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

Ich glaube nicht daran, daß es daran lag..

Ich bleibe immer noch fest bei meinem Beitrag, daß es an Zahlen unter 1000 liegt, wie man weiter oben in meinem Beitrag nachlesen kann. Denn wenn Du zahlen durch 100 dividierst, die kleiner als 1000 sind, ergibt das x,xy. Punkt.

Du hattest nämlich oben die Funktion mt_rand zweimal in Verwendung und bei der zweiten hattest Du 900 bis 1800 festgelegt und da war der Wurm drin. Aber kannst es Dir ja selbst ausrechen.. Dividiere mal einen Wert der unter 1000 liegt durch 100.. dann wirst es sehen. ;-)

Autor:  Eliwood [ Di 21 Jul, 2009 11:59 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

drimatu hat geschrieben:
ps2.: der fehler, warum anfangs keine zahlen mit 2 vorkommastellen 1000/100=10 ausgegeben wurden war dass leerzeichen bei /100
mt_rand(1000 , 2500) / 100;


Nein, das wars garantiert nicht. Dem PHP-Interpreter sind Leerzeichen zwischen den Ausdrücken ziemlich egal. Vor allem bei mathematischen Operatoren.

Edit: Wie? Du willst eine Zufallszahl zwischen 10 25, <= 11 und >= 24 sollen dabei nicht möglich sein? Warum nimmst du dann mt_rand nicht einfach zwischen 11 und 24? :?

Autor:  drimatu [ Di 21 Jul, 2009 12:45 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

ich glaub ich besuche einen kommunikationskurs.
zahl zwischen 10 und 25, wo die mittelren zahlen wahrscheinlicher sind, jedoch zahlen wie 10, 11, 24 und 25 aber auch NICHT unmöglich sind.

Autor:  Eliwood [ Di 21 Jul, 2009 13:03 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

Was du suchst ist ein Zahlengenerator, der normalverteilt Zufallszahlen ausspuckt. PHP kann das _nicht_ von Haus aus.
Du könntest dir aber mit bekannten Algorythmen einen aus normalen Zufallszahlen basteln. Oder du suchst dir einfach eine Funktion hier im Forum, die das kann. gauss_rand() heissen beide Versionen - die eine ist von Auric, die andere von mir.

Autor:  Patzue [ Sa 31 Okt, 2009 23:23 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

[Falscher Thread]

Autor:  drimatu [ Fr 26 Aug, 2011 16:00 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

so, nach über 2 jahren? muss ich das thema noch mal nutzen.
$beispiel = mt_rand((2000 , 15000) /1000);
funktionierte mit allen varianten und möglichkeiten problemlos, bis vor einem festplattencrash.
ein dreiviertel jahr später möchte ich nun wieder anfangen das alles wieder aufzubauen, aber nun wird das , zwischen den beiden zahlen nicht mehr akzeptiert obwohl es früher tadellos funktionierte und es auch in diversen tutorials so drin steht.
jemand evt. eine lösung für mich? mfg

Autor:  Jack [ Fr 26 Aug, 2011 18:22 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

vll ohne Leerzeichen? sont. Kein Plan^^

Autor:  drimatu [ Fr 26 Aug, 2011 18:36 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

nein leider nicht *g* trotzdem danke. lg

Autor:  Charon [ Fr 26 Aug, 2011 21:13 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

drimatu hat geschrieben:
so, nach über 2 jahren? muss ich das thema noch mal nutzen.
$beispiel = mt_rand((2000 , 15000) /1000);
funktionierte mit allen varianten und möglichkeiten problemlos, bis vor einem festplattencrash.
ein dreiviertel jahr später möchte ich nun wieder anfangen das alles wieder aufzubauen, aber nun wird das , zwischen den beiden zahlen nicht mehr akzeptiert obwohl es früher tadellos funktionierte und es auch in diversen tutorials so drin steht.
jemand evt. eine lösung für mich? mfg

Da ist eine falsche Klammerung drin, wodurch mt_rand nur einen Parameter bekommt.

$beispiel = mt_rand(2000, 15000) / 1000;

Autor:  drimatu [ Sa 27 Aug, 2011 00:16 ]
Betreff des Beitrags:  Re: zufallszahlen in logd

oh danke danke danke. ich könnte dich küssen dafür.
ah, nein, lass ich doch besser.
öhm, sachlich: vielen dank dafür. jetzt kann ich endlich normal schlafen. mfg

Seite 3 von 3 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/