生成随机正双精度返回负双值

时间:2016-11-29 09:26:22

标签: c# random

我有一个奇怪的问题(至少对我而言)产生随机双值。

我这样做:

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

我正在尝试生成更多这样的参数(带正值),但是我得到的值很少(这些参数的所有值都是负值),而对于其他参数,也有很少的负值。然而,在上限和下限之间正确生成的参数很少。我很确定paramUpperBound总是比paramLowerBound更大。

另外,要生成另一个参数,我使用的是rndparam对象,这些参数是在一个for循环中生成的。

1 个答案:

答案 0 :(得分:1)

为什么不验证?通常我们都很确定,但丑陋的基本事实将我们(非常强大的)信仰分解为碎片:

// 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;