C#使用系统时出现问题。随机值

C#使用系统时出现问题。随机值,c#,random,C#,Random,我试图创建随机数,然后使用我发现的box-muller算法。我遇到的问题是使用系统随机值进行任何类型的数学运算。我不能取平方根、对数或将它们与浮点值混合。这是我的随机分布代码。我想了好几天,什么都想不出来 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program {

我试图创建随机数,然后使用我发现的box-muller算法。我遇到的问题是使用系统随机值进行任何类型的数学运算。我不能取平方根、对数或将它们与浮点值混合。这是我的随机分布代码。我想了好几天,什么都想不出来

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;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
Random rand1=新的Random();
控制台写入线(“999双1”);
对于(int-ctr=0;ctr请查看以下代码:

 Math.Log(rand1)
这不是试图获取一个随机数的日志…而是试图获取一个随机数生成器的日志。您需要类似以下内容:

double randomNumber = rand1.NextDouble();
// Code using Math.Log(randomNumber)
对随机数生成器本身执行数字运算的概念没有多大意义。

使用以下方法:

            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;

不能取负数的平方根(除非使用复数)。此外,也不能使用随机对象传递给需要数字的函数!你正在创建两个
random
,这是个坏主意。创建一个实例,然后调用
NextDouble()
多次-1:没有引用编译器错误消息,这使您很难看到自己最为困惑的地方。我不禁怀疑,如果除Jon之外的其他人回答相同,他们就不会得到这么多的赞成票。@MitchWheat如果让您感觉好一点的话,代表上限最终还是占据了绝大多数选票。@Servy Woul我很想知道如果没有每日上限,Jon会有多大的声誉:)有什么办法吗?@halex:1884579@TimSchmelter谢谢你的链接。难以置信:)P.S.会对你的评论投你的一个答案,但你也达到了每日上限。真遗憾:)