You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MYSQL RAND()函数的精度是多少?如何生成大数值随机数?

MySQL RAND()函数问题解答

RAND()的精度

MySQL内置的RAND()函数返回64位双精度IEEE 754浮点数,拥有53位二进制有效精度,对应十进制为15~17位有效数字。

FLOOR(RAND()*N)无跳数的最大N值

首先先明确范围规则:RAND()的返回值区间是左闭右开的[0, 1),所以FLOOR(RAND() * N)实际生成的是[0, N-1]区间的整数,如果你需要生成[0, N]区间的整数,应该使用FLOOR(RAND() * (N + 1))。
由于64位双精度浮点数可以精确表示所有不大于2^53(十进制值为9007199254740992)的整数,因此当生成的整数范围上限不超过这个值时,不会出现跳数,区间内的所有整数都有概率被命中。如果N超过2^53,则会因为浮点数精度不足,导致部分整数永远无法被生成。

大于2^53范围的随机数生成方案

你可以拼接多个RAND()的输出结果来得到更大范围的均匀随机数,示例代码如下:

-- 生成0到2^64-1范围内的随机整数
SELECT FLOOR(RAND() * 0x100000000) * 0x100000000 + FLOOR(RAND() * 0x100000000) AS large_random;

如果你需要指定大于2^53的上限M,可以将上述生成的大随机数对M取模。如果对随机数均匀性要求极高,可以采用拒绝采样优化:如果生成的随机数大于FLOOR(2^64 / M) * M,则丢弃该结果重新生成,即可完全避免不均匀问题。

内容的提问来源于stack exchange,提问作者klm123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:54:03