Hi,
ich muss per Zufall doubles generieren zwischen einer Ober- und einer Untergrenze.
Das mache ich zur Zeit wie folgt:
double d = (obereSchranke - untereSchranke) * Math.random() + untereSchranke;
Das funktioniert auch wunderbar. Allerdings nicht für große Schranken.
Angenommen es gilt:
obereSchranke = Double.MAX_VALUE;
untereSchranke = -Double.MAX_VALUE;
Dabei kommen nur riesig-große oder riesig-kleine Werte raus, wobei allerdings auch mal zBsp. 10 oder 0 rauskommen sollte. Das Ergebnis ist also auf gar keinen Fall gleichverteilt!
Das liegt daran, dass Math.random() zwar eine Zahl zwischen 0 und 1 liefert, allerdings ist diese nie "sehr" nah an 1 oder "sehr" nah an 0, sodass diese Zufallszahl keinen wirklichen Einfluss auf den "extremen" Wert in der Klammer hat.
Es kommen ausschliesslich Zahlen der Größenordnung (+/-)10^306 bis (+/-)10^307 heraus, was ja sehr nah an den MAX_VALUE's liegt (10^308).
Gibt es eine Möglichkeit in diesem Wertebereich wirklich gleichverteilte doubles zu erhalten??? Gibt es irgendwelche Generatoren die das wirklich drauf haben? Bzw eine Idee/Vorschlag wie man das mathematisch machen könnte?
Das RNGPack zbsp (http://www.honeylocust.com/RngPack/) scheint das selbe Problem zu haben.
Gruß,
rookeenator
ich muss per Zufall doubles generieren zwischen einer Ober- und einer Untergrenze.
Das mache ich zur Zeit wie folgt:
double d = (obereSchranke - untereSchranke) * Math.random() + untereSchranke;
Das funktioniert auch wunderbar. Allerdings nicht für große Schranken.
Angenommen es gilt:
obereSchranke = Double.MAX_VALUE;
untereSchranke = -Double.MAX_VALUE;
Dabei kommen nur riesig-große oder riesig-kleine Werte raus, wobei allerdings auch mal zBsp. 10 oder 0 rauskommen sollte. Das Ergebnis ist also auf gar keinen Fall gleichverteilt!
Das liegt daran, dass Math.random() zwar eine Zahl zwischen 0 und 1 liefert, allerdings ist diese nie "sehr" nah an 1 oder "sehr" nah an 0, sodass diese Zufallszahl keinen wirklichen Einfluss auf den "extremen" Wert in der Klammer hat.
Es kommen ausschliesslich Zahlen der Größenordnung (+/-)10^306 bis (+/-)10^307 heraus, was ja sehr nah an den MAX_VALUE's liegt (10^308).
Gibt es eine Möglichkeit in diesem Wertebereich wirklich gleichverteilte doubles zu erhalten??? Gibt es irgendwelche Generatoren die das wirklich drauf haben? Bzw eine Idee/Vorschlag wie man das mathematisch machen könnte?
Das RNGPack zbsp (http://www.honeylocust.com/RngPack/) scheint das selbe Problem zu haben.
Gruß,
rookeenator