Deutsches Simutransforum
Formel für Zahlengenerator - Druckversion

+- Deutsches Simutransforum (https://simutrans-forum.de/mybb)
+-- Forum: Off Topic (https://simutrans-forum.de/mybb/forumdisplay.php?fid=55)
+--- Forum: Kunterbunt (https://simutrans-forum.de/mybb/forumdisplay.php?fid=56)
+--- Thema: Formel für Zahlengenerator (/showthread.php?tid=4800)

Seiten: 1 2


- Hajo - 11-01-2010

Guck' auch mal hier.

http://www.funkelwerk.de/library/index.php?n=Library.Mathematics

der Abschnitt über "Asymptotic Formulas" könnte hilfreich sein.


- sojo - 11-01-2010

Zitat:Original von Alexander Brose
  • 1 = Aktion 1 (6,6 %)
  • 2, 3 = Aktion 2 (13,4 %)
  • 4 - 6 = Aktion 3 (20 %)
  • 7 bis 10 = Aktion 4 (26,6 %)
  • 11 bis 15 = Aktion 5 (33,4 %)
Welche Programmiersprache verwendest du? Hoffe ich hab es nicht überlesen. Solltest du Javascript nehmen, neigt diese dazu den ersten und letzten Wert weniger anzuzeigen. Dein Berg könnte Möglicherweise in der Mitte keine Spitze haben.

Die Formel von Cruzer ist gut. Du kannst aber auch aus Cruzers Formel

n = 10^2 / rand

das machen:

Ergebnis = runden((10^2 / rand) * höchste_Zahl);

Edit: Wie Cruzer schon schrieb muss rand eine Zahl zwischen 1 und 9 sein.


- Alexander Brose - 11-01-2010

Zitat:Original von sojo
Welche Programmiersprache verwendest du? Hoffe ich hab es nicht überlesen. Solltest du Javascript nehmen, neigt diese dazu den ersten und letzten Wert weniger anzuzeigen. Dein Berg könnte Möglicherweise in der Mitte keine Spitze haben.
Eine Progammiersprache gibt es konkret nicht. Mich interessiert gegenwärtig eher die Theorie. Eine Spitze brauche ich nicht unbedingt.
Auch hier vielen Dank, Sven. Heute Abend probiere ich es mal aus. Smile

Es soll halt wie das Airbrush-Werkzeug vom alten MS Paint arbeiten. Nur dass in der Mitte eines Quadrates mehr Pixel platziert werden, als Richtung Rand.


- Cruzer - 11-01-2010

Zitat:Original von sojo
Ergebnis = runden((10^2 / rand) * höchste_Zahl);

Edit: Wie Cruzer schon schrieb muss rand eine Zahl zwischen 1 und 9 sein.

Naja dann versuch mal das: deine gewünschte Höchstzahl ist z.b.: 500
Das Höchstmögliche Ergebnis ist dann 10^2 / 10 * 500 = 5000

Damit deine Rechnung stimmt, müsstest du die Höchstzahl noch durch 10 rechnen. Dann hast du wieder etwas zu kürzen, und kommst wieder auf meine Ursprungsformel:
"Ausgabezahl = Höchstzahl² / Zufallszahl" bzw. "n = höchste_Zahl² / rand. (Wobei die Zufallszahl größer als 0 und kleiner gleich der Höchstzahl sein muss.)

Um das ganze zum Beispiel in C zu schreiben:

Code:
int squareRand(int maximumValue)
{
    return ( maximumValue * maximumValue ) / ( rand() * ( maximumValue - 1) + 1 );
}



- sojo - 11-01-2010

Stimmt. Rolleyes Welch ein Quark. Big Grin Aber Quark macht stark!!! Wink

Meine Rechnung bringt keinen Vorteil.


- Alexander Brose - 11-01-2010

Zitat:Original von sojo
Meine Rechnung bringt keinen Vorteil.
Gibst du eine Runde Schwarzbier aus? Wink

Cruzer: Funktioniert prima. *verneig*


- wernieman - 12-01-2010

Dann brauche ich ja auch nicht mehr suchen ;o)


- Alexander Brose - 12-01-2010

Zitat:Original von wernieman
Dann brauche ich ja auch nicht mehr suchen ;o)
Nö, die Sache hat sich erledigt. Hast einen (mehr) gut bei mir, Werner. Wink


- Pennywise - 13-01-2010

Ich hab' die Links nicht verfolgt - evtl. kam's schon vor. Aber als Schnellschuss aus der Huefte:

Eine andere Moeglichkeit ist einfach mit 2 Zufallszahlen zu arbeiten.

Als Beispiel: Wenn man 2 Wuerfel nimmt (1-6) und die Zahlen addiert, ist die durchschnittlich haeufigste Zahl immer die 7, waehrend 2 und 12 am seltensten sind. Die Verteilung sieht dann z.B. so aus:

02: 2.60%
03: 5.27%
04: 8.41%
05: 11.49%
06: 14.07%
07: 16.80%
08: 13.72%
09: 11.29%
10: 8.09%
11: 5.58%
12: 2.68%