rand() * (y-x) + x
咱們學php的都知道,隨機函式rand或mt_rand,可以傳入乙個引數,產生0到引數之間的隨機整數,也可以傳入兩個引數,產生這兩個引數之間的隨機整數。
而在mysql裡,隨機數函式rand不能傳參,產生的0到1之間的浮點數,要是我們需要在mysql
產生大於1的隨機整數,該怎麼辦呢?
這樣的需求並不陌生,例如,咱做的文章系統,需要作弊,給文章的瀏覽量隨機加上某個範圍內的整數。
現在,假設需要產生234到5678之間的隨機整數,mysql下怎麼實現。
我們無法改mysql下rand的產生值,但我們可以改變我們的需求,
1、我們需要最小是234,最大是5678,rand產生的最小是0,最大是1,我們需求的數減去234看看?
最小數234 - 234 = 0,最大數5678 - 234 = 5444;嘿,亮點,我們需求的最小數跟rand產生的最小吻合了。
我們只要讓函式產生0到5444的隨機數,再拿來加上234,就是我們原需求了。
我們原需求用個偽表示式來描述,就會是
取整(rand(0,5444) + 234)
2、現在只要想辦法將我們需求再變一下,使得最小數為0 不變,最大數變化成1,
很明顯,5444減去5443就是1了,但這樣,最小數就會是負數了。
要最小數還是0,最大數是1,太簡單,5444 / 5444 = 1 , 0 /5444 = 0
現在,原需求的偽表示式就是:
取整(rand(0,1) * 5444 + 234)
我們使用四捨五入round
表示式就是
round(rand() * 5444 + 234)
總結一下思路:
1、比較rand(x, y)與rand(0,1)的差異。
2、將rand(x,y)逐步向rand(0,1)變換
rand(x,y)
= rand(0, (y-x)) + x
= rand(0/(y-x), (y-x)/(y-x)) * (y-x) +x
= rand() * (y-x) + x
這是乙個很簡單的數學算術式,用乙個簡單的例子,說了一下一些演算法的基本技巧:降低要求使得自己所掌握的知識能達到需求。
c 隨機數函式rand
c語言中rand 函式生成隨機數的用法 詳細介紹 1 使用該函式首先應在開頭包含標頭檔案stdlib.h include c 建議使用 include,下同 2 在標準的c庫中函式rand 可以生成0 rand max之間的乙個隨機數,其中rand max 是stdlib.h 中定義的乙個整數,它與...
MySQL使用rand函式實現隨機數
sql 的隨機函式newid 和rand sql server的隨機函式newid 和rand select from northwind.orders order by newid 隨機排序 select top 10 from northwind.orders order by newid 從o...
神奇的隨機數rand()
隨機數在統計理論中占有很重要的地位,很多應用都需要用到他,系統自帶的rand 函式產生的是偽隨機數,所以該如何真正的隨機數呢?1 c語言中的時間函式 關於c語言我查到的兩個比較好的博文是 裡面寫的很是詳細,但是我想通過乙個例子來說明感覺比較好。常用的也就這幾個。char a 100 time t n...