Echte Zufallszahlen

  • 13 Antworten
  • Neuester Beitrag
Diskutiere Echte Zufallszahlen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
X

xazen

Ambitioniertes Mitglied
Hallo Leute,

ich hab mal wieder eine Frage. Dachte erst, dass es sicher nicht so schwer wird. Aber nachdem ich mich genauer informiert habe, scheint es doch schwerer zu sein als ich denke?

Jedenfalls würde ich gerne irgendwie echte Zufallszahlen generieren. Keine Pseudo-Zufallszahl.
 
Kranki

Kranki

Ehrenmitglied
Ich kann mir nicht vorstellen, dass du tatsächlich eine Anwendung hast, bei der du einen Unterschied bemerken würdest.
In Software kannst du das jedenfalls nicht machen. Du kannst dir höchstens online eine ziehen von irgendwo.
 
X

xazen

Ambitioniertes Mitglied
ich habe eine View Klasse, wo mithilfe eines zufällig generierten Integers das Verhalten eines KIs bestimmt wird. Manchmal machen 2 Verhalten gleich viel Sinn und ich wil es dem Zufall überlassen, damit der Ausgang des Spiels immer ein anderer ist. Es ist etwas blöd, wenn die KI immer das gleiche macht und man die KI immer über die gleiche Art und Weise besiegen kann.
 
DieGoldeneMitte

DieGoldeneMitte

Experte
Für Dein Vorhaben sollte der normale PRNG aus java.util.Random reichen. Du kannst ihn ggf mit der aktuellen Zeit zu Beginn des Spieles seeden.

"Echten" Zufall gibt es Rechner natürlich nicht, aber mit Kryptografischen Hashes (siehe java.security.SecureRandom) kommt man da schon nahe dran.

Man beachte aber, dass dann eine Zufallszahl mit höhrerem Rechenaufwand einher geht, und dass die Krypto-Engine von Android (momentan) die Bouncycastle-Implementierung ist (da funktionieren viele Beispiele aus dem Netz nicht, da diese idR die SUN Implementierung nutzen)
 
Zuletzt bearbeitet:
X

xazen

Ambitioniertes Mitglied
Code:
int random = (int) (Math.random()*0+1);
Über den Code habe ich immer: 1 bekommen. Jedenfalls nach etwa 10x.
Für das Verhalten brauche ich 2 Zufallszahlen. Und der hatter immer das gleich gemacht. Dabei gibt es noch 3 andere Möglichkeiten.

Wie würde es denn mit Random klappen ? Wenn es mit Random geht, würde ich wohl erne für etwas mehr Performance bei Random bleiben.
 
M

miha

Erfahrenes Mitglied
*0 ??? Hast du dich nur hier vertippt? So wie es da steht ist doch 1 korrekt.
Am Anfang ein Seed mit Zeit - und random ist für 99 % Zufall genug.
 
X

xazen

Ambitioniertes Mitglied
genau meinte natürlich * 1 + 1

ich werde mir das mit dem Seed dann mal anschauen. Danke
 
DieGoldeneMitte

DieGoldeneMitte

Experte
  • random() ist eine Zahl zwischen 0 und 1,
  • *1 ändert nix daran
  • und +1 liefert eine Zahl zwischen 1 und 2.
  • die per (int) nach unten runden liefert 1.
Mit random() * 2 + 1 hättest Du mehr Erfolg.
 
X

xazen

Ambitioniertes Mitglied
Um Missverstände zu vermeiden poste ich einfach nochmal so wie ich es wirklich als Methode hatte:

Code:
    [B]public[/B] [B]static[/B] [B]int[/B] randomZahl([B]int[/B] untere, [B]int[/B] obere)
    {
    [B]int[/B] spanne = obere - untere;
    [B]return[/B] ([B]int[/B]) (Math.[I]random[/I]()*spanne+untere);
    }
Müsste ja also funktionieren ?
 
garak

garak

Ehrenmitglied
xazen schrieb:
Manchmal machen 2 Verhalten gleich viel Sinn und ich wil es dem Zufall überlassen, damit der Ausgang des Spiels immer ein anderer ist.
Ich würde das viel einfacher machen:

Code:
if (new Date().getTime() % 2 == 0)
  // Lösung 1
else
  // Lösung 2
Somit ist - abhängig wann das Spiel beendet wurde - entscheidend ob gerade eine gerade oder eine ungerade Millisekunde dran ist. Vollkommen ausreichend.
 
DieGoldeneMitte

DieGoldeneMitte

Experte
xazen schrieb:
Um Missverstände zu vermeiden poste ich einfach nochmal so wie ich es wirklich als Methode hatte:

Code:
    [B]public[/B] [B]static[/B] [B]int[/B] randomZahl([B]int[/B] untere, [B]int[/B] obere)
    {
    [B]int[/B] spanne = obere - untere;
    [B]return[/B] ([B]int[/B]) (Math.[I]random[/I]()*spanne+untere);
    }
Müsste ja also funktionieren ?
Nicht, wenn randomZahl() die Werte von untere bis obere (einschließlich) liefern soll. Denn das sind obere-untere+1 verschiedene mögliche Werte. Zähl mal nach :D
 
Zuletzt bearbeitet:
K

ko5tik

Stammgast
xazen schrieb:
Hallo Leute,

ich hab mal wieder eine Frage. Dachte erst, dass es sicher nicht so schwer wird. Aber nachdem ich mich genauer informiert habe, scheint es doch schwerer zu sein als ich denke?
Nimm doch den Beschleunigungsmesser - das Billigteil ist so was von verrauscht das es
einen brechränkten Anzahl der Werte ziemlich zufällig ausgibt.

Andere Sensoren könnten auch interessant sein
 
X

xazen

Ambitioniertes Mitglied
danke das ist eine sehr gute Alternative :)