Laden...

Long Random Zahl

Erstellt von Richter vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.407 Views
R
Richter Themenstarter:in
104 Beiträge seit 2006
vor 13 Jahren
Long Random Zahl

Hallo!

Ich brauche eine Long Zufallszahl! Standardnetrandom gibt leider nur Ints zurück....

Also schaffe ich durch Multplikation ein long. Das erscheind mir aber sehr "teuer"

Geht es irgendwie besser als das:


(((long)int.MaxValue) * LocalRnd.Next()) + LocalRnd.Next()

Ich glaube auch, dass ich nicht den Kompletten Zahlenbereich eines Long abdecke, stimmt das?

Nevu - Intelligente Maschinen, die Zukunft alles rund um das Thema Künstliche Intelligenz!

C
2.122 Beiträge seit 2010
vor 13 Jahren

Das (((long)int.MaxValue) * LocalRnd.Next()) + LocalRnd.Next() ist falsch. Du müsstest mit 0x100000000 multiplizieren, das ist eins mehr als MaxValue.
Oder verschieb einen int um 32 Bit nach rechts und dann addier den zweiten int drauf.
(Next() << 32) + Next()

Das mit dem Bereich stimmt, Next() gibt nur positive Zahlen zurück. Du müsstest fast dreimal Next miteinander verbasteln und nur jeweils die unteren 31 Bits verwenden.
Oder du nutzt NextBytes und baust dir daraus ein long, das ist aber noch teurer würd ich sagen.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo chilic,

es gibt ja mehrere Überladungen von Next; die mit zwei Parametern kann auch negative Zahlen liefern. Allerdings ist eine der Schranken exklusiv, weshalb man auch mit dieser Überladung nicht den vollen Wertebereich abgedeckt bekommt.

Daher ist dein NextBytes-Vorschlag durchaus sinnvoll. Man lässt sich damit einfach ein Array der Länge 8 füllen und mach daraus mit BitConverter.ToInt64 einen long. Deine Einschätzung einer schlechten Performance teile ich nicht, zumal man ja das Array nur einmal erzeugen muss und dann immer wieder verwenden kann.

herbivore