C#除法有问题吗?
这是我的一段代码,每秒调用一次,大约10秒后,值开始变得奇怪(见下文):C#除法有问题吗?,c#,C#,这是我的一段代码,每秒调用一次,大约10秒后,值开始变得奇怪(见下文): 双a; 双b; 对于(int i=0;i
双a;
双b;
对于(int i=0;i
以及输出:
a=-0.05b=0.00
除数=41
a+b=-0.0524010372273268
currAC和Aveac值是双精度[]
到底发生了什么事????每次加法的结果都是正确的,但除法值是错误的,但它读取的a和b是正确的
编辑:“41”是第一次计算的值,即当a=currAC[0]时,但这不应保留???
double
由于规范的原因,可能会导致不精确的结果(请参阅)。您可能希望使用十进制,因为它提供了更高的精度。double
由于规范的原因,可能会导致不精确的结果(请参阅)。您可能想使用十进制,它提供了更高的精度。如果b=-0.001219512195122,那么a/b==41,a+b=-0.051219512195122-所以这些区域周围的一些东西(舍入等)听起来是可行的
还有,;请注意,对于某些算术,可能使用的是仍在寄存器中的值。寄存器的精度可能与局部变量略有不同(因此给出的结果也不同)。如果b==-0.001219512195122,则a/b==41,且a+b=-0.051219512195122-因此这些区域周围的某些东西(舍入等)听起来是可行的
还有,;请注意,对于某些算术,可能使用的是仍在寄存器中的值。寄存器的精度可能与局部变量略有不同(因此给出的结果也不同)。如果变量的声明尽可能接近使用它们的位置,会发生什么
for (int i = 0; i < currAC.Length; i++ )
{
double a = currAC[i];
double b = aveACValues[i];
double divisor = (a/b);
Console.WriteLine("a = " + a.ToString("N2") + "\t" + "b = " + b.ToString("N2"));
Console.WriteLine("divisor = " + divisor.ToString());
Console.WriteLine("a+b = " + (a+b).ToString());
}
for(int i=0;i
这将确保您每次都有一个新的“除数”,并且不会受到其他作用域的影响。如果变量被声明为尽可能接近使用它们的位置,会发生什么
for (int i = 0; i < currAC.Length; i++ )
{
double a = currAC[i];
double b = aveACValues[i];
double divisor = (a/b);
Console.WriteLine("a = " + a.ToString("N2") + "\t" + "b = " + b.ToString("N2"));
Console.WriteLine("divisor = " + divisor.ToString());
Console.WriteLine("a+b = " + (a+b).ToString());
}
for(int i=0;i
这将确保您每次都有一个新的“除数”,并且不会受到其他作用域的影响。您可以将除数除以零。上帝保佑你。我认为这是一个非常接近于零的近似值。那么,.05/~0将产生一个合理的大数字。我不明白。如果b是0.00,这不是一个被零除的除法吗?不,因为它实际上是0.00xxxxx,我将Console.WriteLine四舍五入到两位小数
Console.WriteLine(-0.05f/0.00f)代码>显示-Infinity
对于我来说,首先,如果你真的提供了一个小的、完整的、可以工作的程序来演示你所遇到的问题,它会变得容易得多;然后人们可以分析它,而不是试图猜测。第二,你把a/b叫做除数,而实际上它是商,这一事实非常令人困惑。除数是b,被除数是a,a/b是商。你除以零。上帝保佑你。我认为这是一个非常接近于零的近似值。那么,.05/~0将产生一个合理的大数字。我不明白。如果b是0.00,这不是一个被零除的除法吗?不,因为它实际上是0.00xxxxx,我将Console.WriteLine四舍五入到两位小数Console.WriteLine(-0.05f/0.00f)代码>显示-Infinity
对于我来说,首先,如果你真的提供了一个小的、完整的、可以工作的程序来演示你所遇到的问题,它会变得容易得多;然后人们可以分析它,而不是试图猜测。第二,你把a/b叫做除数,而实际上它是商,这一事实非常令人困惑。除数是b,被除数是a,a/b是商。嗨,但这能回答为什么会记住值41吗?不是真的,但我们需要知道除数是如何定义的。我不认为他使用的是基数为2的浮点数和基数为10的浮点数有什么区别decimal
只有在您有兴趣将数字四舍五入到某个以10为基数的表示位数时才是“更好”的。您好,但这能回答为什么会记住值41吗?不太可能,但我们需要知道除数是如何定义的,我不认为他使用的是以2为基数的浮点数和以10为基数的浮点数有什么区别decimal
只有在您有兴趣将数字四舍五入到某个以10为基数的表示位数时才真正“更好”。嘿,伙计们,你们误解了我的问题-问题是,即使循环在下一次运行时结束,第一次除法的结果仍会被记住,它总是41或任何数字在第一位…@Tom-什么让你认为它不是正确的值?我的意思是-有一些值a/b会将这些值显示为2dp,并给出除数。嘿,伙计们,你们误解了我的问题-问题是第一次除法的结果会被记住,即使循环在下一次运行时完成,它总是