Erste Schritte nextGaussian zwischen zwei Werten

ungenau

Mitglied
Hallo, ich komme gerade nicht weiter... Ich suche eine Methode, die einen nextGaussian-Wert zum Beispiel zwischen 5 und 10 zurückgibt, mit einem Schwerpunkt bei 7,5. Das ist mein Ansatz dafür:

Java:
public static double getRandomDouble(double from, double to, double a) {
    return (new Random().nextGaussian() + 1.0) / 2.0 * (to - from) * a + from;
}

System.out.println(getRandomDouble(5, 10, 1));

Aber es kommen auch manchmal Werte <5 oder >10 dabei heraus. Wo ist mein Denkfehler? Außerdem möchte ich mit dem a-Parameter die Kurve nach oben ziehen wenn >0.5 oder "quetschen" wenn <0.5... Vielen Dank fürs Lesen.
 
Eine normalverteilte Variable kann Werte zwischen minus Unendlich und plus Unendlich haben. Du kannst sie nicht auf ein Intervall beschränken!
 
hast du dein new Random beschränkt ?

wenn zb dieser wert raus kommt hast du folgendes :
von 5 bis 10 und to 1
-0,6 / 10 + 5 = irgendwas kleiner als 5


du hast keinerlei beschränkung zb dass nur positive zahlen raus kommen können ... oder betrachtest den fall wenn from oder to negativ sind

EDIT: eig -1.6 aber ist da auch schon wurscht
 
Zuletzt bearbeitet von einem Moderator:

wenn hier der zweite wert raus kommt also 1.5
und du mit (5 , 6 ,1) startest kommst du auf das
2.5 / 2 + 5 = 6,irgendwas

es passt so noch nicht
und es wurden nicht mal die dümmsten werte gewählt die so möglich sind
 
Das hat überhaupt nichts mit meiner Frage zu tun.
Doch, es hat etwas mit deiner Frage zu tun: Es geht in beiden Fällen um den Versuch, eine Gauss-verteilte Variable zu beschränken (im beschriebnen Thread auf positive Zahlen, bei dir auf ein Intervall).

Was soll das denn bedeuten:
Zufallszahl mit Häufung in Intervall...
Eine "Häufung" im Intervall [5,10] hast du doch schon, nur dass nicht alle Werte in diesem Intervall liegen.
 
Eine "Häufung" im Intervall [5,10] hast du doch schon, nur dass nicht alle Werte in diesem Intervall liegen.
Soll ich außerhalbliegende Werte droppen? Gibts da nicht was adäquates?

Doch, es hat etwas mit deiner Frage zu tun: Es geht in beiden Fällen um den Versuch, eine Gauss-verteilte Variable zu beschränken (im beschriebnen Thread auf positive Zahlen, bei dir auf ein Intervall).
Wenn ich das richtig sehe, ist die Methode bereits auf den positiven und negativen double-Wertebereich beschränkt...

@Mart Ich versteh leider gar nicht was sagst oder sagen möchtest.
 
ich habe 2 Websiten gezeigt die für newRandom().nextGaussian was raus bekommen haben (weil ich zu faul war es selbst zu tun)

dann hab ih deine formel mit deinen Werten und den Ergebnissen deines Aufraufs das Ausgerechnet und habe dir gezeigt warum etwas das höher als to ist raus kommen kann
und gezeigt dass etwas kleiner als to raus kommen kann
 
Doch, in dem Thread wird auch Deine Frage behandelt, Du musst ihn nur weit genug verfolgen. Weiter unten findest Du dann auch Code dazu (z. B. https://www.java-forum.org/thema/mit-nextgaussian-positive-zahlen-erzeugen.185076/#post-1186821).
Also doch droppen. Kann man das dann nicht einfach antworten, anstatt mich auf einen Thread zu verweisen, in dem es primär um etwas anderes geht? Der Tonfall von temi ist zudem mehr als unangemessen.

Weiterhin ist die Implementierung von dem mrBrown ja furchtbar.
 
Also doch droppen. Kann man das dann nicht einfach antworten, anstatt mich auf einen Thread zu verweisen, in dem es primär um etwas anderes geht? Der Tonfall von temi ist zudem mehr als unangemessen.
Da der positive Wertebereich von double auch nur ein Intervall ist, sehe ich da jetzt keinen großen Unterschied. Was stört Dich denn am Tonfall von @temi? Der wird es auswendig auch nicht mehr gewusst haben, hat sich aber an einen zwei Jahre alten Thread erinnert und Dir den auch noch rausgesucht.

Weiterhin ist die Implementierung von dem mrBrown ja furchtbar.
Die Implementierung von @mrBrown dürfte wenigstens funktionieren, auch wenn er es nicht so mit Obfuscation hat.
 
Aber das Beispiel von gutem Code zeigt, dass Java einfach schlecht ist. In Java kann man keinen guten Code schreiben!

Es fehlt ganz deutlich etwas wie:
Java:
import java.lang.IllegalArgumentException as IAE;
import java.util.Ramdom as R;

Nur so kann man dann den guten kurzen Code schreiben wie z.B.:
R r = new R();
 

Neue Themen


Zurück
Oben