gpt4 book ai didi

C#/Java 数字随机化

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:07 24 4
gpt4 key购买 nike

是否有可能从 .NET 中模仿 Java 使用的精确随机化?我有一个种子,我希望在创建随机数时能够在 C# 和 Java 中收到相同的结果。

最佳答案

您无需阅读源代码。该公式是单行的,在 documentation for java.util.Random. 中给出。

这是部分翻译:

[Serializable]
public class Random
{
public Random(UInt64 seed)
{
this.seed = (seed ^ 0x5DEECE66DUL) & ((1UL << 48) - 1);
}

public int NextInt(int n)
{
if (n <= 0) throw new ArgumentException("n must be positive");

if ((n & -n) == n) // i.e., n is a power of 2
return (int)((n * (long)Next(31)) >> 31);

long bits, val;
do
{
bits = Next(31);
val = bits % (UInt32) n;
}
while (bits - val + (n - 1) < 0);

return (int) val;
}

protected UInt32 Next(int bits)
{
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);

return (UInt32)(seed >> (48 - bits));
}

private UInt64 seed;
}

例子:

Random rnd = new Random(42);
Console.WriteLine(rnd.NextInt(10));
Console.WriteLine(rnd.NextInt(20));
Console.WriteLine(rnd.NextInt(30));
Console.WriteLine(rnd.NextInt(40));
Console.WriteLine(rnd.NextInt(50));

两个平台的输出都是0, 3, 18, 4, 20

关于C#/Java 数字随机化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147524/

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