我正在查看随机数生成器并找到一个伪代码:
function Noise1(integer x)
x = (x<<13) ^ x;
return ( 1.0 - ( (x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
end function
我想把它转换成C#,但我得到各种错误,如无效表达式和“)”预期。这是我到目前为止如何转换它?
double Noise(int x) {
x = (x<<13) ^ x;
return ( 1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);
}
感谢。
答案 0 :(得分:5)
我不知道你开始使用的语言,但在C#中,常量应该看起来不同:将7fffffff
更改为0x7fffffff
。
答案 1 :(得分:3)
您可以使用.Net Framework随机对象
Random rng = new Random();
return rng.Next(10)
但我强烈建议您阅读Jon Skeet关于随机生成器的文章
答案 2 :(得分:1)
编辑:测试并报告非空序列
将十六进制常量转换为使用“0x”前缀
转换int&lt; - &gt;仔细加倍
拆分表达式以使其更具可读性
这是代码和单元测试(虽然结果很奇怪):
using System;
namespace Test
{
public class Test
{
public static Int64 Noise(Int64 x) {
Int64 y = (Int64) ( (x << 13) ^ x);
Console.WriteLine(y.ToString());
Int64 t = (y * (y * y * 15731 + 789221) + 1376312589);
Console.WriteLine(t.ToString());
Int64 c = t < 0 ? -t : t; //( ((Int32)t) & 0x7fffffff);
Console.WriteLine("c = " + c.ToString());
double b = ((double)c) / 1073741824.0;
Console.WriteLine("b = " + b.ToString());
double t2 = ( 1.0 - b);
return (Int64)t2;
}
static void Main()
{
Int64 Seed = 1234;
for(int i = 0 ; i < 3 ; i++)
{
Seed = Noise(Seed);
Console.WriteLine(Seed.ToString());
}
}
}
}