gpt4 book ai didi

c# - 简单的伪随机算法

转载 作者:太空狗 更新时间:2023-10-29 22:35:16 25 4
gpt4 key购买 nike

我需要一个伪随机生成器,它将一个数字作为输入并返回另一个数字,该数字是可重现的并且看起来是随机的。

  • 每个输入数字应该恰好匹配一个输出数字,反之亦然
  • 相同的输入数字总是产生相同的输出数字
  • 相邻的连续输入数字(例如 1 和 2)应该产生完全不同的输出数字(例如 1 => 9783526、2 => 283)

它一定不是完美的,它只是创建随机但可重现的测试数据。

我使用 C#。


前段时间我写了这段有趣的代码,它产生了一些随机的东西。

  public static long Scramble(long number, long max) 
{
// some random values
long[] scramblers = { 3, 5, 7, 31, 343, 2348, 89897 };
number += (max / 7) + 6;
number %= max;
// shuffle according to divisibility
foreach (long scrambler in scramblers)
{
if (scrambler >= max / 3) break;
number = ((number * scrambler) % max)
+ ((number * scrambler) / max);
}

return number % max;
}

我想要更好、更可靠的东西,可以处理任何大小的数字(没有最大参数)。

这可能可以使用 CRC 算法来解决吗?或者一些洗牌的东西。

最佳答案

我从这个答案中删除了微软代码,GNU 代码文件要长很多,但基本上它包含来自 http://cs.uccs.edu/~cs591/bufferOverflow/glibc-2.2.4/stdlib/random_r.c 的代码:

int32_t val = state[0];
val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;
state[0] = val;
*result = val;

为了你的目的,种子是 state[0] 所以它看起来更像

int getRand(int val)
{
return ((val * 1103515245) + 12345) & 0x7fffffff;
}

关于c# - 简单的伪随机算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537921/

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