2013-12-13 19 views
1

我无法在MySQL的文档中的任何地方找到RAND()函数是否使用统一分布。有人知道吗?在MySQL中分配RAND()

+0

何塞请看这里http://stackoverflow.com/questions/2360180/how-to-generate-a-gaussian-distribution-using-mysql-user-defined-function。 – Christos

+0

据我了解它的统一分布,但我无法在文档中找到它 – exussum

+0

你是出于好奇还是你有一个特定的用例需要它?如果是这样,请详细说明一下,因为它可能有助于获得有用的答案。 – Spudley

回答

1

我一直无法快速找到该函数的源代码;看到它可能有助于得到更好的答案。这就是说,它看起来像一个'不......但有点接近'。

从文档中我可以看到它试图随机(也可以选择种子);但有两个警告意味着它可能不总是一致的,当你期望它的第一个问题是它的文档:

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产生了很多价值,那么没有什么能保证如果你的价值都很低,那么下一个价值就会很高。它将永远是随机的..