gpt4 book ai didi

random - Erlang - 随机数生成器

转载 作者:行者123 更新时间:2023-12-03 18:15:12 25 4
gpt4 key购买 nike

我正在使用以下内容来生成接近随机数。

3> erlang:ref_to_list(make_ref()).

"#Ref<0.0.0.36>"

我想要的是00036

嗯,这是我在之前的帖子中被告知我可以做的事情。我突然想到,从 make ref 中提取数字并不容易。

任何人都可以展示它是如何轻松完成的,或者可能推荐另一种解决方案。

请记住,在相同的几纳秒内调用时,使用 random:seed() 不是随机的。

问候

最佳答案

注意:来自 OTP 18 erlang:now/0random模块已弃用,OTP 20 将删除 random模块。见 Time and Time Correction in Erlang了解更多详情。此外,如果您使用 rand:uniform/0,则不再需要按进程播种。 .以下内容留作引用。

问题是您使用的是 random不正确。 random:seed/0将始终使用相同的种子为随机数生成器播种。这不适合你想要的。相反,您可以使用 random:seed(erlang:now())用另一个数字播种它,即当前时间。

“如果两个电话非常接近会发生什么?”你可能会问。嗯,Erlang 的人是这么想的,所以 now/0保证总是返回递增的数字:

Returns the tuple {MegaSecs, Secs, MicroSecs} which is the elapsed time since 00:00 GMT, January 1, 1970 (zero hour) on the assumption that the underlying OS supports this. Otherwise, some other point in time is chosen. It is also guaranteed that subse‐ quent calls to this BIF returns continuously increasing values. Hence, the return value from now() can be used to generate unique time-stamps, and if it is called in a tight loop on a fast machine the time of the node can become skewed.



(强调我的)

另请注意 random PRNG 是每个进程的,因此您应该始终使用播种器调用来启动您的进程:
init([..]) ->
random:seed(erlang:now()),
[..]
{ok, #state { [..] }}.

对此使用引用也许是可能的,但我认为它不可行。解决方案超过 erlang:ref_to_list/1它并不漂亮。

关于random - Erlang - 随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com