作者:
l2ll (咚叮咚咚)
2014-12-10 17:19:36第一次java發文,如果違反版規還請告知,自刪
自己寫專題程式需要利用到一個值
必須 >=0 <=1
然而以往都是只有用到 >=0 <1 的數
所以開始思考要怎麼寫 原本以為會很容易
想到的方法是
利用 Math.round 把小數後面某個很小的值4捨5入
讓=1的部分可以成立,而且數值影響不大,所以就這樣寫
但是隨便想想都不太正確
首先,這樣小數後面最少最少也少了一位
再來,機率上應該就不是完全的隨機了
舉例來說: 想要一個小數一位的 0<=x<=1
random得到一個 0<=x<1
x*10得 0<=x<10
(Q) Math.round(x)得 0<=x<=10 x為整數
x/10得 0<=x<=1 x為一位小數
第Q行 這邊機率上,得到0跟10的機率都只有其他值的一半
0.000~0.499 9.500~9.999 相較於 0.500~1.499 的感覺
才想到有沒有可能做出真的隨機的 0<=x<=1
作者:
l2ll (咚叮咚咚)
2014-12-10 18:13:00好的,感謝你只是想是不是有辦法利用邏輯生出來XD
作者:
ssccg (23)
2014-12-10 18:46:00看Random.nextDouble是(((long)next(26) << 27) + next(27)) /(double)(1L << 53)你要最大值是1就是分母改-1
直覺=> >=1一個 <=0一個 用另外一個random去看要哪一個或是random不到範圍內的就重random 反正範圍外的很小抱歉 精神不好看成要兩段的...QQ
看要小數幾位,假設兩位,那取0到100,再除以100?這樣可行嗎?
作者:
l2ll (咚叮咚咚)
2014-12-11 13:07:00可以喔~~~~也比較沒有機率問題
作者: lubright2258 2014-12-14 16:55:00
利用sin(x) x=random從0~(pi/2+很小的數) !?