目前我正在写论文,我遇到了一个我以前从未见过的.Net C#的行为.我在谈论计算中的错误.我实现了这个公式:
1/2*(Theta i-1 + Theta i)+ Sum(Alph k,k = 1,i-1)
此公式适用于4个对象.Theta在声明为float的所有对象中,值为1,5708.Alpha初始化为0,并且每次迭代都会增加.
第一个实施
float alpha = 0;
float value = 0;
for (int sphereCount = 1; sphereCount < this.spheres.Count; sphereCount++)
{
value = (1/2) * (this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta);
alpha += value;
}
Run Code Online (Sandbox Code Playgroud)
使用此版本值始终为0.0!所以我改成了:
工作实施
float alpha = 0;
float value = 0;
for (int sphereCount = 1; sphereCount < this.spheres.Count; sphereCount++)
{
value =(this.spheres[sphereCount - 1].Theta + this.spheres[sphereCount].Theta) * 1/2;
alpha += value;
}
Run Code Online (Sandbox Code Playgroud)
通过移除1/2周围的括号并将其放置在计算结束时它起作用.
为什么会这样???
当你将1/2放在括号中而不依赖于1/2的位置时,结果似乎为0.0.但是当我在最后放置(1/2)时它会产生0.0.这里有人知道为什么吗?
这个
(1 / 2)
Run Code Online (Sandbox Code Playgroud)
计算结果为0,因为它是整数除法.如果你说
(1 / 2f)
Run Code Online (Sandbox Code Playgroud)
要么
(1 / (float) 2)
Run Code Online (Sandbox Code Playgroud)
你会没事的,因为它会强制浮动divsion.或者,甚至更好,只需写0.5.