BAR*_*BAR 5 random erlang integer
我想快速生成足够随机的数字.
现在我使用以下内容:
uniqueID() -> C = random:uniform(9999) , %%%DO SPEED TEST
random:seed(C,random:uniform(99),random:uniform(99)),
{_, {H, Min, S}} = calendar:universal_time(),
{A, B} = statistics(wall_clock),
(A*B) +((H + C + Min) * S).
Run Code Online (Sandbox Code Playgroud)
与make_ref()相比,它需要太长时间.
6> make_ref().
#Ref<0.0.0.74>
Run Code Online (Sandbox Code Playgroud)
如何获取唯一引用并将其解析为整数?
比如00074
谢谢您的帮助.
你真的确定要erlang:make_ref/0用于唯一的数字吗?Refs仅对于一个erlang vm的一次启动是唯一的 - 它们是可重复的,可预测的,并且如果您计划将它们用于除了erlang消息中的标签之外的其他任何内容以匹配请求和回复,则会产生糟糕的唯一标识符.
您可以通过将ref格式化为字符串(erlang:ref_to_list/1)然后解析它来实现.
但是,我认为最好的想法是使用crypto:rand_bytes/1自己的N随机字节的字节二进制,或者crypto:rand_uniform/2如果你需要一个范围内的随机整数.此方法至少可以为您生成的随机整数的质量提供一些保证(请参阅openssl rand_bytes文档).