Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的计算每次都加1,而不是实际计算正确的数字_C# - Fatal编程技术网

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

C# 我的计算每次都加1,而不是实际计算正确的数字,c#,C#,所以我必须制作一个程序,打印出进行某种计算的次数。然而,当我打印结果时,我似乎得到了16000个数字,每个新的时间加上+1。我的问题是如何解决这个问题。我不知道 谢谢你的帮助 我的代码: class Program { static void Main(string[] args) { double a = 0; double b = 0; double distance = 0; int i = 1;

所以我必须制作一个程序,打印出进行某种计算的次数。然而,当我打印结果时,我似乎得到了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();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
双a=0;
双b=0;
双倍距离=0;
int i=1;
对于(双x=-2;x<2;x=x+0.01)
{
对于(双y=-2;y<2;y=y+0.01)
{

虽然(距离双精度类型表示浮点类型。请参阅。此类型不是您使用的精确加法的正确数字类型。而不是使用十进制类型。

双精度类型表示浮点类型。请参阅。此类型不是您使用的精确加法的正确数字类型。而不是使用十进制类型。

你试图绘制一个分形的描述-我没有检查数学,但它让我想起了我以前用来生成Mandelbrot集图像的代码

问题是,你应该为每个点创建一个独立的计算-但是你要保持
a
b
i
distance
点之间的状态。这意味着一旦
distance
大于2且
i
大于100,你将永远无法进入insi取消
while
循环中的所有变量。只需将这些变量的声明和初始化移动到内部
for
循环中即可

此外,假设想法是有效地将
while
循环的条件限制为每点100次迭代,则应该将
while
循环的条件一起进行AND运算,而不是一起进行OR运算

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);
    }
}
for(双x=-2;x<2;x+=0.01)
{
对于(双y=-2;y<2;y+=0.01)
{
//在这里初始化局部变量,因为它们对于每个点都是独立的。
双a=0;
双b=0;
双倍距离=0;
int i=1;

虽然(距离我假设你试图绘制某种描述的分形图-我还没有检查数学,但它让我想起了以前生成Mandelbrot集图像的代码

问题是,你应该为每个点创建一个独立的计算-但是你要保持
a
b
i
distance
点之间的状态。这意味着一旦
distance
大于2且
i
大于100,你将永远无法进入insi取消
while
循环中的所有变量。只需将这些变量的声明和初始化移动到内部
for
循环中即可

此外,假设想法是有效地将
while
循环的条件限制为每点100次迭代,则应该将
while
循环的条件一起进行AND运算,而不是一起进行OR运算

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);
    }
}
for(双x=-2;x<2;x+=0.01)
{
对于(双y=-2;y<2;y+=0.01)
{
//在这里初始化局部变量,因为它们对于每个点都是独立的。
双a=0;
双b=0;
双倍距离=0;
int i=1;

虽然(你正在打印的距离
i
,这就是你代码中的
i
发生的情况。是的,我知道,i是计算量,但他应该为每个新的x和每个新的ySo创建一个新的计算,并将距离与i一起打印出来,以查看计算结果。你想打印其他内容吗?例如
distance
?我怀疑
a
b
distance
I
都是在任何循环之外初始化的,但只在内部循环中进行了深层次的更改,并且在
循环期间终止内部
的条件将在所有后续迭代中保持有效。不清楚您试图在这里做什么,但基于此,逻辑似乎有缺陷。您正在打印代码中的
i
,这就是代码中的
i
发生的情况。是的,我知道,i是计算量,但他应该为每个新的x和每个新的ySo打印距离以及i创建一个新的计算,以查看计算结果。您想打印什么吗其他?如
distance
?我怀疑
a
b
distance
I
都是在任何循环之外初始化的,但只在内部循环中发生了深层次的更改,并且在
循环期间终止内部
的条件将在所有后续迭代中保持有效。不清楚是什么您试图在这里执行此操作,但基于此,逻辑似乎有缺陷。不,我怀疑
double
对于这里的用例绝对合适。(这当然是我在非常类似的情况下使用的,绘制Mandelbrot集。)这不是问题。不,我怀疑
double
对于这里的用例绝对合适。(这当然是我在非常类似的情况下使用的,绘制曼德尔布罗特集。)这不是问题所在。