Erzeugt nur positive Zufallszahlen in SQLite

7

In SQLite

  

Die Funktion random() gibt eine pseudozufällige Ganzzahl zwischen -9223372036854775808 und +9223372036854775807 zurück.

Sie können mit Select random() % n ;

eine Zufallszahl mit dem Maximalwert n erhalten

Aber das erzeugt immer noch negative Zahlen. Wie kann ich in SQLite nur positive Zufallszahlen erzeugen?

    
Fischer 29.11.2011, 00:15
quelle

4 Antworten

17

Verwenden Sie die Funktion ABS() (absoluter Wert):

%Vor%

Beachten Sie Folgendes:

  

Wenn X die ganze Zahl -9223372036854775808 ist, dann löst abs(X) einen Integer-Überlauffehler aus, da es keinen gleichwertigen positiven 64-Bit-Zweierkomplementwert gibt.

    
NullUserException 29.11.2011, 00:17
quelle
4

Um positive (einschließlich null) Zufallszahlen mit nur der oberen Grenze zu erzeugen, verwenden Sie

%Vor%

Um positive und ungleich 0 Zufallszahlen zu generieren, verwenden Sie

%Vor%

HIGH - repräsentiert die obere Grenze

LOW - steht für die untere Grenze.

    
Sanju 27.06.2016 12:04
quelle
3

Ihre Methode random() % n zum Abrufen einer Zufallszahl innerhalb eines bestimmten Bereichs ist fehlerhaft, da dies zu einer ungleichmäßigen Verteilung führt. Die Zahl Null kommt doppelt so oft vor wie jede andere Zahl.

Übrigens ist die Verwendung von ABS , um die Zahlen positiv zu machen, genau entgegengesetzt fehlerhaft, so dass die Zahl Null halb so oft auftaucht wie jede andere Zahl, so dass sie sich gegenseitig aufheben.

%Vor%     
Guffa 29.11.2011 01:05
quelle
0
%Vor%

und

%Vor%

beide tend , um das gewünschte Ergebnis zu erzielen.

Für mich ist das zweite besser lesbar. Zuerst wählen wir zufällig eine ganze Zahl aus, dann wenden wir ABS () an, um sicherzustellen, dass sie nicht negativ ist, und dann modulieren wir sie mit N, um den geeigneten Bereich auszuwählen.

Die erste Methode ist jedoch zuverlässiger. Die zweite Methode hat ein sehr niedriges, aber nicht Nulles Risiko, einen ganzzahligen Überlauf auszulösen, wie von NullUserException festgestellt.

    
Pete Cacioppi 09.05.2015 03:25
quelle

Tags und Links