也许这是一个愚蠢的问题,但我无法弄清楚问题。
运行以下代码:
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
。
错误在哪里?为什么我得到了否定结果?我缺少什么?
答案 0 :(得分:3)
请注意:
3284894596 = 57314 * 57314
例如,在我的机器中,INT_MAX
是:
2147483647
这意味着,你是溢出的受害者(这就是为什么你在Stackoverflow中发布的好处:) :)。
在你的机器INT_MAX
中可能有另一个值,但它再次小于57314²。
您可能还想看看这里:
你的分裂行动不会有任何好处,因为乘法将首先发生。您可以使用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
,但如果您不小心,则会失去一些准确性。
答案 1 :(得分:1)
你很可能会遇到溢出。真正的大数平方可以创建一个无法存储在为elements.style{
display: block;
}
分配的内存中的数字,因此它会“溢出”到负数中。
你可以尝试的事情:
查看与MSDN相关的文章类型:MSDN