gpt4 book ai didi

c++ double 的平方生成一个负数

转载 作者:行者123 更新时间:2023-11-30 01:46:43 24 4
gpt4 key购买 nike

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

运行以下代码:

    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) = -1010valueLine[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,但如果您不小心,您将失去一些准确性。

关于c++ double 的平方生成一个负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com