已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
三个月前关门了。
Improve this question
我希望基于给定的“种子”值生成相同的随机序列(数字或字符)。
使用标准的Randomize
函数似乎没有这样的选项。
例如,在C#中,可以使用种子值(Random seed c#)初始化Random函数。
如何在 Delphi 中实现类似的功能?
已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
三个月前关门了。
Improve this question
我希望基于给定的“种子”值生成相同的随机序列(数字或字符)。
使用标准的Randomize
函数似乎没有这样的选项。
例如,在C#中,可以使用种子值(Random seed c#)初始化Random函数。
如何在 Delphi 中实现类似的功能?
2条答案
按热度按时间jhdbpxl91#
您只需要为
RandSeed
全局变量指定一个特定的值。实际上,我几乎对您的提问感到惊讶,因为您清楚地知道
Randomize
函数,其文档说明如下:应通过调用
Randomize
或为RandSeed
赋值来初始化随机数生成器。0g0grzrc2#
该问题未将螺纹安全性作为一项要求,但OP在评论中明确指出。
一般来说,伪随机数生成器有内部状态,以便计算下一个数字。因此,它们不能被假定为线程安全的,并且每个线程都需要一个示例。对于封装的线程安全随机数,一个替代方法是使用一个合适的哈希函数,如xxHash,并向其传递一个种子和一个计数器,在线程中的每次调用后递增该计数器。
这里有一个xxHash的 Delphi 实现:https://github.com/Xor-el/xxHashPascal
对于一般用途,很容易根据需要在1、2或3维中创建多个版本,并返回0..1中的浮点数或范围中的整数。