並不是說有錯,只是這不太符合一般數學的思考邏輯,

假設Z是隨機整數
0<=Z<1
0<=Z*10<10......(同乘10)
0<=Z*10<=9......(<10即<=9)
此即0~9的整數亂數
------------------------------
一般化:改成0~m的整數亂數(把9改成m)
0<=R*10<=9
0<=R*(m+1)<=m
--------------------​​​​​​​----------
原始:0<=R<1
目標:n<=X<=m ......因為不知道中間會變成什麼,所以假設一個X,不要理他
逆推n<=X<=m

0<=X-n<=m-n ......同時減n
0<=X-n<=(m-n) ......把m-n看成一個數
然後。。。。。。
同除(m-n)?同除(m-n+1)?怎麼辦解不下去了?

沒關係,(幸好)對照上一則推導得知:
X-n的位置要放的應該是R*(m-n+1)
因為最大值是(m-n)
所以中間是R乘(m-n+1)

0<=R*(m-n+1)<=(m-n)
n<=R*(m-n+1)+n<=m ......同時加n
所以這就是範圍n~m的隨機整數
​​​​​​​程式就長這樣:Math.random()*(m-n-1)+n
​​​​​​​----------​​​​​​​----------​​​​​​​----------
為何我說不符合一般的思考邏輯?
首先他是用結果逆推的方式,
但是遇到瓶頸時,卻是嫁接另外一個推導過的式子來幫忙
我們平常解數學問題的時候,有這麼好康的事嗎?
你怎麼確定逆推到一半,不知道該怎麼解時,剛好有一個式子可以替換?
如果經驗不足,你怎麼知道遇到瓶頸時,要用哪個式子來替換?

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Kuihao 的頭像
    Kuihao

    溫暖午後的金針田__孕育有趣的創新

    Kuihao 發表在 痞客邦 留言(0) 人氣()