在SQLite中仅生成正的随机数

Fis*_*her 13 sqlite random

在SQLite中

random()函数返回-9223372036854775808和+9223372036854775807之间的伪随机整数.

您可以随机获得最大值为n的随机数 Select random() % n ;

但这仍然会产生负数.如何在SQLite中只生成正的随机数?

Nul*_*ion 22

使用ABS()(绝对值)函数:

SELECT ABS(RANDOM() % N)
Run Code Online (Sandbox Code Playgroud)

注意:

如果X是整数-9223372036854775808,则abs(X)抛出整数溢出错误,因为没有等效的正64位二进制补码值.


Guf*_*ffa 5

random() % n在一定范围内获取随机数的方法有缺陷,因为它会产生不均匀分布。数字零出现的频率是任何其他数字的两倍。

顺便说一句,使用ABS使数字为正的方法存在完全相反的缺陷,使数字 0 出现的频率是任何其他数字的一半,因此它们相互抵消。

abs(random() % n)
Run Code Online (Sandbox Code Playgroud)


San*_*nju 5

要生成仅具有上限的正(包括零)随机数,请使用

SELECT ABS(RANDOM() % N)
Run Code Online (Sandbox Code Playgroud)

要生成正数非零随机数,请使用

SELECT ABS(RANDOM()) % (HIGH - LOW) + LOW
Run Code Online (Sandbox Code Playgroud)

HIGH-代表上限

LOW-表示下限。