在C#中生成随机浮点数

时间:2014-05-16 13:33:01

标签: c# random

如何在float-1之间生成100个1 -0.1,主要分布在0.1-0.1之间(90%的浮点数必须介于0.1for (int counter = 0; counter < 100; counter++) { randomnum = 0f; randomnum = Convert.ToSingle(randomvalues.NextDouble() / 10); storerandomvalues1[counter] = randomnum; } )。 目前我使用的并不是我想要的

{{1}}

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

这应该有效。它生成一个随机数,以选择您是否在-0.1,0.1范围内,然后是第二个扩展到您想要的实际范围。您可以只使用一个随机double,但是会让代码更容易错误,并且更难阅读(所有这些都是为了提高性能)。

for (var counter = 0; counter < 100; counter++)
{
    int selector = randomvalues.Next(10); // 0 <= selector < 10
    double randomnum;
    if (selector < 9)
    {
        randomnum = randomvalues.NextDouble() * 0.2 - 0.1;
    }
    else
    {
        randomnum = randomvalues.NextDouble() * 1.8 - 0.9;
        randomnum += Math.Sign(randomnum) * 0.1;
    }
    storerandomvalues1[counter] = (float)randomnum;
}

答案 1 :(得分:0)

正如我在评论中所说,有无数可能的解决方案。以下是两种可能的解决方案:

  1. 正态(又名高斯)分布,均值为0且为标准 偏差为0.06079,其结果的90%在-0.1和之间 +0.1,因此生成标准法线并将其乘以0.06079。从技术上讲,你应该检查绝对值是否超过1, 但这相当于在16西格玛获得结果 - 这只是 不会发生。

  2. 但是,您可能不喜欢解决方案,因为不会跨度 实践中的整个范围。将要生成的变体 如前一段所述X,如果X < -0.1,则替换 它带有制服(-1,-0.1)。同样,如果X > 0.1,请替换它 制服(0.1,1)。

  3. 我实现了这两个,生成了100,000个值,这里是直方图:

    Histograms and quantiles for two approaches

    请注意,5 th 和95 th 分位数分别为-0.0998和+0.09971,在采样误差范围内有效-0.1和+0.1。

答案 2 :(得分:-1)

使用log函数,生成1到10之间的浮点数,然后取结果的log 10。然后随机改变标志。

答案 3 :(得分:-3)

试试这个,它应该有用......

   Random rnd = new Random();
    for (int counter = 0; counter < 100; counter++)
    {
        storerandomvalues1[counter]=(2*rnd.NextDouble())-1; // Exact Sample() is protected so u can use NextDouble()
    }
相关问题