所以我目前正在为我的数据结构课程编写一个作业,让我在最基本的地方让我头疼。我们正在使用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()方法我不确定。我起初认为这是因为(双)演员,所以我把所有的变化都变成了双打,但我遇到了同样的问题。
答案 0 :(得分:2)
结果不是很大,实际上是2.63425e+07 ≈ 26342524
,这是您计算的确切结果:
double temp = (double)reps * ((double)reps + 1.0); // = 2
priority = (double)pop/sqrt(temp); // = (37253956 / 1.41421) = 26342524
您的计划没有任何问题:)