也许这是个白痴问题,但我无法弄清楚这个问题。
运行以下代码:
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
划分,但如果不小心,则会失去一些准确性。