2016-11-29 91 views
0

我有一個奇怪的問題(至少對我來說)產生隨機雙值。生成隨機正雙倍返回負雙倍值

我這樣做:

Random rndparam = new Random(); 
double param1 = rndparam.NextDouble() * (paramUpperBound - paramLowerBound) + paramLowerBound; 
MySheetWrite.Cells[i + 1, 1] = param1; 

我想創造更多的像這樣的參數(正值),但我得到負值爲少數人(這些參數的所有值均爲負)而對於其他參數,也很少有負值。然而,在上限和下限之間正確生成的參數很少。我很確定paramUpperBound總是比paramLowerBound大。

此外,要生成另一個參數,我正在使用rndparam對象,並且這些參數在for循環中生成。

+3

並且paramLowerBound總是大於0? – Evk

+0

paramUpperBound和paramLowerBound是什麼類型 –

+0

我懷疑excel單元格的格式會導致對你的價值的進一步操縱。 –

回答

1

爲什麼不只是有效?通常,我們可以肯定的,但很醜地面實況打破我們的(非常強身)的信念爲碎片:「我敢肯定,paramUpperBound是比永諾更大paramLowerBound」

// Do not re-create Random! You'll have badly skewed distributions 
// Simple, but not thread safe solution - have one static instance for all 
private static Random rndparam = new Random(); 

... 

// I've assumed paramLowerBound and paramUpperBound are parameters 
if (paramLowerBound < 0) 
    throw new ArgumentOutOfRangeException(
    "paramLowerBound", 
    "Lower bound must be non-negative"); 
else if (paramUpperBound < paramLowerBound) 
    throw new ArgumentOutOfRangeException(
    "paramUpperBound", 
    "Upper bound must not be less than lower bound"); 

... 

double param1 = rndparam.NextDouble() * 
       (paramUpperBound - paramLowerBound) + 
       paramLowerBound; 

MySheetWrite.Cells[i + 1, 1] = param1; 
+0

不錯,但在房間裏的大象是統計災難性的隨機rndparam = new Random();'。你*必須*以科學的名義說出這些。 – Bathsheba

+0

@Bathsheba:我明白了!謝謝。最簡單的(但不是線程安全的)出路是爲所有人提供一個「靜態隨機rndparam」實例。 –

+0

謝謝。有一個upvote! – Bathsheba