因此,我必须制作一个程序,该程序可以打印进行一定计算的次数。但是,当我打印结果时,我似乎得到了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();
}
}
答案 0 :(得分:3)
我认为您正在尝试绘制一些描述性的分形-我还没有检查数学,但这让我想起了以前我用来生成Mandelbrot集图像的代码。
问题是您应该为每个点创建一个独立的计算-但是您要保持a
,b
,i
和distance
之间的状态点。这意味着一旦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。此类型不是正确的数字类型,无法像您使用的那样精确添加。而不是使用十进制类型。