无论出于何种原因,一个简单的测试程序正在产生除零误差,即使尽可能分辨为零是不可能的:
#include <iostream>
using namespace std;
int main()
{
int Level = 1;
int EXPTNL = 0;
cout << Level << endl;
EXPTNL = (Level * 1250) * 1000 * 1000 * Level / (2 / ((1000 * (Level * 1250)) / 2));
cout << EXPTNL << endl;
system("Pause");
}
我错过了什么吗?这个完全相同的公式在另一个更复杂的程序中运行得很好。
答案 0 :(得分:3)
这是整数除法:
2 / ((1000 * (Level * 1250)) / 2)
并且,由于分母的幅度大于分子的幅度,因此得到0。
测试这个很容易:
std::cout << (2 / ((1000 * (Level * 1250)) / 2)) << std::endl;
您需要浮点除法,您可以通过在分子或分母(或两者)中使用浮点数来获得。
答案 1 :(得分:2)
这几乎肯定会导致零值:
(2 / ((1000 * (Level * 1250))
如果level
非零,1000 * (Level * 1250)
远大于2,整数除法将得到结果为零。
也许您想使用浮点值,以便EXPTNL成为浮点计算,然后在结尾处使其成为整数。
我还期望(Level * 1250)* 1000 * 1000过度使用32位整数,因此您可能希望将其作为浮点计算。
只需将1250中的每个值都设置为1250.0并解决问题。