请问下,比较简单的实现 0.5 到 2 之间的随机数的方法

2020-11-13 14:54:37 +08:00
 ukipoi

要求就是 扩大一倍或者缩小一倍,两边的概率相同。

这个可以用 Math.radom(),仅以数学的方式,一行就完成吗?

我好像只能先随机出是扩大还是缩小,然后在分别写扩大 /缩小的倍率。

大大们可以给个其他的思路么?

7104 次点击
所在节点    程序员
103 条回复
huijiewei
2020-11-13 14:56:36 +08:00
不就是 50~200 之间 /100 就好了
ukipoi
2020-11-13 14:58:44 +08:00
@huijiewei
这样 0.5-1 和 1-2 的概率不一样
yukiww233
2020-11-13 15:00:42 +08:00
没懂啥意思
ran(1.5)+0.5?
ukipoi
2020-11-13 15:02:05 +08:00
@yukiww233
这样子随机 0.5-1.5 全是扩大的
只有 0-0.5 才是缩小的
概率不一样吧?
adajoy
2020-11-13 15:02:57 +08:00
(Math.random() * 3 + 1) / 2
rioshikelong121
2020-11-13 15:04:39 +08:00
Math.random() * 1.5 + 0.5 不行么。
rioshikelong121
2020-11-13 15:05:35 +08:00
@ukipoi 写几个测测简单跑跑几万次就知道了。验证成本又不高。
nvkou
2020-11-13 15:06:34 +08:00
random 0.0 - 1 期望 0.5
0.5—2 期望 1.25

所以平移过去 random()+1.25 为啥不行?
wysnylc
2020-11-13 15:06:39 +08:00
随机数一律建议使用 ThreadLocalRandom
kop1989
2020-11-13 15:08:41 +08:00
不太懂所谓“0.5-1 和 1-2 的概率不一样”是什么意思(概率论估计已经还给老师了😂)
0.5~1 的跨度是 0.5,1~2 的跨度是 1,我的理解,如果是真随机,落在这两个域的概率必然不同……
rioshikelong121
2020-11-13 15:10:46 +08:00
真正有这种概率不均等的情况一般是用现成的 random API 求随机整数的时候。
ukipoi
2020-11-13 15:12:06 +08:00
@rioshikelong121
嗯,应该是我想的有问题。
下意识的以为 0.5-1.5 里包含的数比 0-0.5 包含的数多了
ipwx
2020-11-13 15:13:11 +08:00
是说:

1. 先投掷一枚硬币,决定是扩大或是缩小;
2. 然后决定 1~2 之间的倍率?

我的思路:

u = random(-1, 1)

if u < 0:
..x = x / (1 - u)
else:
..x = x * (1 + u)
xcstream
2020-11-13 15:14:13 +08:00
不知道题目表达的意思

大概我想是 e 的 x 次方 在 0.5-2 之间 ,x 是平均分布
ukipoi
2020-11-13 15:14:39 +08:00
@rioshikelong121
因为本来是 扩大或者缩小 1.1 1.2 1.3 - 2.0 倍
请问 ((int)((Math.random()*3+1)*5)/10) 能不能满足要求呢?
dobest
2020-11-13 15:15:17 +08:00
如果要求 [0.5, 1] 和 [1, 2.0] 等概率的话,可以试试 v = math.random(); v + 0.5 if v <=0.5 else v*2; 但一行可能搞不定。其他 ax+b 的形式是线性变换可能无法做到直接变换成 [0.5, 1] 和 [1, 2.0] 是等概率的。
misdake
2020-11-13 15:15:43 +08:00
lz 的意思我觉得是先抛一个硬币决定乘和除,然后随机一个 1~2 之间的数字,用当前值乘或除(根据硬币)这个数。
ukipoi
2020-11-13 15:16:18 +08:00
@ukipoi
应该是 ((int)((Math.random()*3+1)*5))/10
ukipoi
2020-11-13 15:19:42 +08:00
@ukipoi
不对, (1-4)/2 的区间是 0.5-1.25 我被自己绕晕了 ;;
ukipoi
2020-11-13 15:20:42 +08:00
@ipwx
我也是这个想法,但是不知道有没有其他解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/724860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX