【问题标题】:C++ Integer Division giving very large numberC ++整数除法给出非常大的数字
【发布时间】:2017-10-22 19:05:30
【问题描述】:

所以我目前正在为我的数据结构类写一个作业,这让我在最基本的地方感到头疼。我们正在结合优先级队列研究 Hungtington-Hill 方法,当我尝试进行简单的除法以获得等于一个州的人口除以几何平均值的“优先级”时,我得到非常大的数字。我的状态类中的变量和方法如下所示:

class State{
 private:
    string state;
    int pop;
    int reps;
    double priority;
};
void State::calculatePriority(){
    double temp = (double)reps * ((double)reps + 1.0);
    priority = (double)pop/sqrt(temp);
}

calculatePriority() 方法给了我疯狂的输出,它会像这样读入:

州:加利福尼亚

2010年人口普查:37253956

代表:1

优先级:0

然后发布 calculatePriority() 我明白了:

州:加利福尼亚

2010年人口普查:37253956

代表:1

优先级:2.63425e+07

我在这里犯了一个逻辑错误吗?我不确定问题是什么。我不确定可能与 sqrt() 方法有关。起初我以为是因为 (double) 演员表,所以我将所有 vars 都更改为 doubles,但我遇到了同样的问题。

【问题讨论】:

  • 如果你用计算器算出你的公式的正确答案:(37253956 / sqrt(1 * (1 + 1))
  • @tambre Square root.
  • @tambre":平方根。sqrt(temp) 大约是代表。
  • @DanMallory 告诉你,using namespace std; is a bad practice,永远不要使用它。
  • @tadman 你是对的 - 我没有考虑到初始优先级会高得离谱的事实

标签: c++ type-conversion double division


【解决方案1】:

结果并没有那么大,其实是2.63425e+07 ≈ 26342524,就是你计算的准确结果:

double temp = (double)reps * ((double)reps + 1.0); // = 2
priority = (double)pop/sqrt(temp); // = (37253956 / 1.41421) = 26342524

你的程序没有问题:)

【讨论】:

    猜你喜欢
    • 2015-08-29
    • 2010-09-12
    • 2011-09-23
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多