1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  3. Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
    Information ausblenden

Zufallszahl genauer festlegen +/-

Dieses Thema im Forum "Entwickler-Forum" wurde erstellt von Sarah Lunardi, 1. November 2011.

  1. Sarah Lunardi

    Sarah Lunardi Freund/in des Forums

    Beiträge:
    612
    Zustimmungen:
    36
    Punkte für Erfolge:
    28
    In meinem aktuellen Projekt arbeite ich an einer Stelle mit der llFrand()-Funktion.

    Die folgenden Float Parameter sollten ja bekannt sein:
    llFrand(MAX-MIN)+MAX

    Mein Problem ist jedoch das ich den Minus Bereich, wie auch den Plus Bereich abdecken möchte und dementsprechend zwischen -1 bis +1 die Zahl ermitteln lasse. (1 ist nur ein Beispiel, könnte auch 2, 23 oder so sein)

    Aber wirklich so ein großes Spektrum möchte ich gar nicht abdecken. Eigentlich möchte ich nur in meinem Beispiel folgende Bereiche:
    0.5 bis 1.0
    -0.5 bis -1.0
    Nun ich könnte dies sicherlich mit einer Funktion realisieren, die anhand eines Zufälligen True oder False entsprechend, ein llFrand in einem der beiden Bereiche ausführt.

    Jedoch frage ich mich ob es noch eine kürzere saubere Möglichkeit dafür gibt oder ob llFrand() wirklich so beschränkt ist?
     
  2. Shirley Iuga

    Shirley Iuga Forumsgott/göttin

    Beiträge:
    7.507
    Zustimmungen:
    2
    Punkte für Erfolge:
    36
    llFrand ist leider bisschen beschränkt in der Leistung bzw. in der Verteilung.

    Das Problem ist, dass llFrand(float x) immer nur ein einen Float im Intervall [0,x) liefert. D.h. 0 <= Zufallszahl < x.
    Und wenn du nun x wirklich mit in die Ergebnisse aufnehmen willst, dann musst du (wegen der "Körnigkeit" der Floats) eigentlich den Intervall [0, x + 1.175494351E-38 ) nehmen, da 1.175494351E-38 die kleinstmögliche Float Zahl in LSL ist. Aber für die meisten praktischen Zwecke in SL reicht einfach llFrand(x).

    Statt der True/False Funktion kann man dann auch einfach eine Funktion basteln, die so lange eine Zufallszahl zwischen -1 und 1 wählt, bis sie nicht mehr im von dir unerwünschten Intervall liegt.

    Code:
    float Zufallszahl()
    {
        float z;
        do z = llFrand(2.0) -1;
        while ((z < 0.5)&&(z > -0.5));
        return z;
    }