简单程序中的零错误划分

时间:2014-01-16 07:13:06

标签: c++ error-handling divide-by-zero

无论出于何种原因,一个简单的测试程序正在产生除零误差,即使尽可能分辨为零是不可能的:

#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");
}

我错过了什么吗?这个完全相同的公式在另一个更复杂的程序中运行得很好。

2 个答案:

答案 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并解决问题。