我无法在 MySQL 的文档中找到 RAND() 函数是否使用均匀分布的任何地方。有人知道吗?
最佳答案
我没能快速找到该函数的源代码;看到它可能有助于获得更好的答案。也就是说,它看起来像是“不……但有点接近”。
从文档中我可以看到它试图是随机的(并且您可以选择播种它);但有两个注意事项,这意味着当您期望第一个问题在它的文档中时,它可能并不总是统一的:
RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers on demand that is portable between platforms for the same MySQL version.
即它的代码作为一个真正的随机数生成器是值得怀疑的——它对于大多数用途来说已经足够好了,但是不能被信任用于加密,我敢打赌甚至不能被信任它是统一的如您所料。
他们声称它并不完美意味着它几乎肯定会至少通过其中一些测试;方法仍然不清楚,但如果它不是完美的 RNG,你将不会看到完美均匀的分布;我希望范围的间隙或峰值更常见/更不常见。 http://www.stat.fsu.edu/pub/diehard/cdrom/pscript/monkey.ps (此后还有其他工作,但这仍然是验证 RNG 的一些关键工作)。
它打赌它背后的代码肯定不会尝试保证均匀分布,因为这样做(跟踪已经发生的事情的历史)会浪费大量内存。在任何情况下,如果您已经使用完美的 RNG 生成了很多值,那么没有什么能保证如果您的值到目前为止都很低,那么下一个值会很高。它总是随机的..
关于mysql - RAND()在MySQL中的分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565732/