也许这是个白痴问题,但我无法弄清楚这个问题。

运行以下代码:

    double num = 0.0;
    double den = 0.0;
    std::string line;
    if (std::getline (file,line))
    {
        std::istringstream iss(line);
        while (iss>>valueLine[j++]){} //Read and parse an entire line
        for (int i = 0; i < numberOfUe; i++)
        {
            num = num + (valueLine[i+1]/1000);
            den = den + ((valueLine[i+1]*valueLine[i+1])/1000000);
        }
        [...]

我在((valueLine[i+1]*valueLine[i+1])/1000000) = -1010时获得了valueLine[i+1] = 57314
错误在哪里?为什么我获得否定结果?我缺少什么?

最佳答案

注意:

3284894596  = 57314 * 57314

例如,在我的机器中,INT_MAX是:
2147483647

这意味着您是溢出的受害者(这就是为什么您擅长在Stackoverflow中进行发布:))。

在您的计算机中,INT_MAX可能具有另一个值,但再次小于57314²。

您可能还想在这里看看:

maximum value of int

您进行除法运算不会有任何好处,因为乘法将首先发生。您可以使用unsigned int。在我的机器上:
#include <limits>
#include <iostream>

int main(){

    std::cout << std::numeric_limits<unsigned int>::max() << std::endl;
    unsigned int a = 57314;
    std::cout << a * a << std::endl;
}

给出:
4294967295
3284894596

PS-您可以将每个术语用100划分,但如果不小心,则会失去一些准确性。

08-19 01:57