用c ++求解等式方程

时间:2014-03-31 14:13:48

标签: c++ int double

需要格式化,编辑需要一些时间。

3 个答案:

答案 0 :(得分:1)

unsigned int l与投放到int的表达式进行比较会导致问题,这会产生未定义的结果。在第二种情况下,内部表达式全部评估为unsigned int并在评估后转换为int(精度损失可能会降低正值)。在第一种情况下,除法适用之前,除法函数的提名者将被转换为int

你应该更好地写下这样的条件,或者甚至更好地省略演员表(你的表达式中没有单floatdouble数学运算,你'仅处理unsigned int):

while(l>(unsigned int)(i*(i+1)*(2*i+1))/3) { // ...
      // ^^^^^^^^

如果您这样做,您将始终经历无休止或非常长时间的循环。恕我直言,检查条件表达式的结果是否可能大于std::numeric_limits<unsigned int>::max()不能更大是没有意义的。

答案 1 :(得分:1)

此代码不会为您提供正确答案。计算可以改写为(i *(i + 1)*(2 * i + 1))&lt; 3 * 4,294,967,295,现在考虑左手边计算的含义。

答案 2 :(得分:1)

while循环中出现的不等式为3阶。这种类型的曲线具有非常高的斜率,这意味着坐标的微小变化会在y中产生巨大的数量。 while循环很快遇到了unsigned int和i的溢出,因此给出了永无止境的循环(是的,永远不会结束,我试过)。

解决方案很简单。以对数打破不平等。现在三阶多项式是log的线性。最终它奏效了。

VS