Objective-C可重复随机数生成器一个java.util.random



对于测试和其他目的,能够生成多个可重复随机数流通常很有用。在Java中,有Java.util.Random。您可以创建多个Random对象,每个对象都有自己的种子,这样每次运行程序时,对任何特定Random实例的后续调用都会返回相同的伪随机数序列。我看过arc4random的文档,它看起来像是一个很棒的生成器。然而,我看不出有任何方法可以提供种子或支持多个独立实例。看起来BSD库函数的random()家族是实现这一点的最佳方法。类似以下摘录的内容。。。

@interface Random : NSObject {
    @private
    char _state[256];
}
+ (Random *)getDefaultInstance;
+ (Random *)getRepeatableInstance;
- (Random *)init;
- (Random *)initWithSeed:(unsigned)seed;
- (long)nextLong;
@end
@implementation Random
- (void)setup:(unsigned)seed
{
    initstate(seed, _state, sizeof(_state));
}
- (Random *)init
{
    self = [super init];
    unsigned seed = (unsigned)arc4random();
    [self setup:seed];
    return self;
}
- (Random *)initWithSeed:(unsigned int)seed
{
    self = [super init];
    [self setup:seed];
    return self;
}
- (long)nextLong
{
    char *oldState = setstate(_state);
    long result = random();
    setstate(oldState);
    return result;
}
@end

已经有其他东西做到了吗?我不关心线程安全。我不会跨线程使用生成器。

"是否已经有其他东西可以做到这一点?"

总是很难用"不"来回答,因为很难证明我什么都知道,因为我当然不知道,但不——我从来没有遇到过这样的事情(作为一个Cocoa类,也就是说。用例本身就很常见)。

您想要的是所谓的伪随机数生成。这里有一些算法https://mathoverflow.net/questions/29494/pseudo-random-number-generation-algorithms或在此处获取更多信息http://en.wikipedia.org/wiki/Random_number_generators.

使用系统功能(rand()srand()random()srandom()arc4random())通常足以满足每个人的需求。

还要注意,obj-c中的long与Java中的long非常不同。

相关内容

最新更新