我的计算每次都加1,而不是实际计算正确的数字

时间:2018-12-04 15:42:13

标签: c#

因此,我必须制作一个程序,该程序可以打印进行一定计算的次数。但是,当我打印结果时,我似乎得到了16000个数字,这些数字每次新加1。我的问题是如何解决此问题。我不知道...

谢谢您的帮助!

我的代码:

class Program
{
    static void Main(string[] args)
    {
        double a = 0;
        double b = 0;
        double distance = 0;
        int i = 1;
        for (double x = -2; x < 2; x = x+0.01)
        {
            for (double y = -2; y < 2; y = y+ 0.01)
            {
                while(distance <= 2 || i < 100)
                {
                    a = a * a - b * b + x;
                    b = 2 * a * b + y;
                    double a2b2 = Math.Pow(a, 2) + Math.Pow(b, 2);
                    distance = Math.Sqrt(a2b2);
                    i++;
                }
                Console.WriteLine(i);
            }
        }
        Console.ReadKey();
    }
}

2 个答案:

答案 0 :(得分:3)

我认为您正在尝试绘制一些描述性的分形-我还没有检查数学,但这让我想起了以前我用来生成Mandelbrot集图像的代码。

问题是您应该为每个点创建一个独立的计算-但是您要保持abidistance之间的状态点。这意味着一旦distance大于2并且i大于100,您将从不进入while循环的内部。只需将这些变量的声明和初始化移到内部for循环中的内部中即可。

另外,假设您的while循环的条件是有效地将其限制为每点100次迭代,则应将它们进行“与”运算,而不是进行“或”运算。

for (double x = -2; x < 2; x += 0.01)
{
    for (double y = -2; y < 2; y += 0.01)
    {
        // Initialize the local variables here, as they're meant to be independent for each point.
        double a = 0;
        double b = 0;
        double distance = 0;
        int i = 1;

        while (distance <= 2 && i < 100)
        {
            a = a * a - b * b + x;
            b = 2 * a * b + y;
            double a2b2 = Math.Pow(a, 2) + Math.Pow(b, 2);
            distance = Math.Sqrt(a2b2);
            i++;
        }
        Console.WriteLine(i);
    }
}

答案 1 :(得分:-1)

double类型表示浮点类型。参见wiki。此类型不是正确的数字类型,无法像您使用的那样精确添加。而不是使用十进制类型。