2013-04-17 56 views
-7

我想創建隨機數,然後使用我發現的這個盒子算符算法。我遇到的問題是使用System.Random值進行任何類型的數學運算。我不能採取平方根,記錄或混合浮點值。這是我隨機分配的代碼。我一直在想它幾天,不能拿出任何東西。使用System.Random值的C#麻煩

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     Random rand1 = new Random(); 
     Console.WriteLine("999 Doubles1."); 
     for (int ctr = 0; ctr <= 999; ctr++) 
      Console.Write("{0,8:N3}", rand1.NextDouble()); 
     Console.WriteLine(); 
     Random rand2 = new Random(); 
     Console.WriteLine("999 Doubles2."); 
     for (int ctr = 0; ctr <= 999; ctr++) 
      Console.Write("{0,8:N3}", rand2.NextDouble()); 
     Console.WriteLine(); 

     float mu = .75F; 
     float sigma = .1F; 

     float z1 = Math.Sqrt(-2 * Math.Log(rand1)) * Math.Sin(2 * Math.PI * rand2); 
     float z2 = Math.Sqrt(-2 * Math.Log(rand1)) * Math.Cos(2 * Math.PI * rand2); 
     float x1 = mu + z1 * sigma; 
     float x2 = mu + z2 * sigma; 
     } 
    } 
} 
+3

你不能把負數的平方根(除非您使用複數)。此外,您不能使用隨機對象傳遞給需要數字的函數! –

+0

你正在創建'Random'的兩個實例,這是一個壞主意。創建一個實例,並多次調用'NextDouble()' – CodesInChaos

+0

-1:沒有引用編譯器錯誤消息,使您很難看到最感興趣的內容。 –

回答

8

看看這段代碼:

Math.Log(rand1) 

那不是試圖採取隨機數的日誌...它試圖利用一個隨機數發生器日誌。你需要類似的東西:

double randomNumber = rand1.NextDouble(); 
// Code using Math.Log(randomNumber) 

對隨機數發生器本身進行數值運算的概念沒有多大意義。

+5

我不禁想知道,如果任何人,但喬恩同樣回答,他們不會得到這麼多upvotes。 –

+0

@MitchWheat如果它讓你感覺更好,那麼代表總是最終吞噬絕大多數的選票。 – Servy

+0

@Servy有趣的是,知道Jon會有多少聲望,而沒有每日上限:)。有什麼辦法嗎? – halex

2

使用此:

  double double1 = rand1.NextDouble(); 
      double double2 = rand1.NextDouble(); 

      double z1 = Math.Sqrt(-2 * Math.Log(double1)) * Math.Sin(2 * Math.PI * double2); 
      double z2 = Math.Sqrt(-2 * Math.Log(double1)) * Math.Cos(2 * Math.PI * double2); 
      double x1 = mu + z1 * sigma; 
      double x2 = mu + z2 * sigma;