C# 我的计算每次都加1,而不是实际计算正确的数字
所以我必须制作一个程序,打印出进行某种计算的次数。然而,当我打印结果时,我似乎得到了16000个数字,每个新的时间加上+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;
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
对于这里的用例绝对合适。(这当然是我在非常类似的情况下使用的,绘制曼德尔布罗特集。)这不是问题所在。