生成随机正双倍返回负双倍值

问题描述:

我有一个奇怪的问题(至少对我来说)产生随机双值。生成随机正双倍返回负双倍值

我这样做:

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单元格的格式会导致对你的价值的进一步操纵。 –

为什么不只是有效?通常,我们可以肯定的,但很丑地面实况打破我们的(非常强身)的信念为碎片:“我敢肯定,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