簡體   English   中英

將代碼轉換為C#

[英]Convert Code to C#

我正在研究隨機數生成器,發現其中一個的偽代碼:

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);
}

謝謝。

我不知道您是從哪種語言開始的,但是在C#中,十六進制常量的外觀應該有所不同:將7fffffff更改為0x7fffffff

您可以使用.Net Framework隨機對象

Random rng = new Random();
return rng.Next(10)

但我強烈建議您閱讀Jon Skeet的這篇有關隨機生成器的文章

http://csharpindepth.com/Articles/Chapter12/Random.aspx

編輯:測試並報告了非空序列

  1. 將您的十六進制常量轉換為使用“ 0x”前綴

  2. 仔細轉換int <-> double

  3. 拆分表達式以使其更具可讀性

這是代碼和單元測試(盡管結果奇怪):

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());
           }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM