[问题] random >=0 <=1 如何产生

楼主: 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
作者: realmeat (真肉)   2014-12-10 17:21:00
就自己写random generator...
楼主: 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
作者: fireslayer (fireslayer)   2014-12-10 21:13:00
直觉=> >=1一个 <=0一个 用另外一个random去看要哪一个或是random不到范围内的就重random 反正范围外的很小抱歉 精神不好看成要两段的...QQ
作者: v9290026 (CH)   2014-12-11 11:26:00
看要小数几位,假设两位,那取0到100,再除以100?这样可行吗?
楼主: l2ll (咚叮咚咚)   2014-12-11 13:07:00
可以喔~~~~也比较没有机率问题
作者: lubright2258   2014-12-14 16:55:00
利用sin(x) x=random从0~(pi/2+很小的数) !?

Links booklink

Contact Us: admin [ a t ] ucptt.com