C++中等式等式的求解

C++中等式等式的求解,c++,int,double,C++,Int,Double,需要的格式化、编辑将需要一些时间。您的问题是由于将未签名的int l与强制转换为int的表达式进行比较而导致的,这将给出未定义的结果。在第二种情况下,内部表达式全部求值为无符号int,并在求值后转换为int,精度损失可能会减少正值。在第一种情况下,除法函数的命名符在除法应用之前被强制转换为int 你最好这样写你的条件,或者干脆省略强制转换。在你的表达式中没有单浮点数或双数学运算,你只处理无符号int: 如果您这样做,您将始终体验到循环无休止地运行或运行很长时间。如果检查条件表达式的结果是否可能大

需要的格式化、编辑将需要一些时间。

您的问题是由于将未签名的int l与强制转换为int的表达式进行比较而导致的,这将给出未定义的结果。在第二种情况下,内部表达式全部求值为无符号int,并在求值后转换为int,精度损失可能会减少正值。在第一种情况下,除法函数的命名符在除法应用之前被强制转换为int

你最好这样写你的条件,或者干脆省略强制转换。在你的表达式中没有单浮点数或双数学运算,你只处理无符号int:


如果您这样做,您将始终体验到循环无休止地运行或运行很长时间。如果检查条件表达式的结果是否可能大于std::numeric_limits::max,则没有意义,因为它不能大于。

此代码不会给出正确答案。计算可以重写为i*i+1*2*i+1<3*4294967295,现在考虑左手边的计算意味着什么。< /P> < P>在while循环中出现的不等式为3阶。这种类型的曲线有很高的斜率,这意味着坐标的微小变化会在y轴上产生巨大的变化。虽然循环很快遇到了无符号int和i的溢出,因此给出了永无止境的循环是永无止境的,我尝试了

解决办法很简单。在对数上打破相等。现在三阶多项式是对数的线性。最终它成功了


请修正缩进,以便更容易看到差异。还有,你说的是什么浮点数?除了极低的解析差异外,没有什么区别,你对上面的内容有什么期望,你得到了什么?运行代码,你会看到差异。就我所见,在任何版本中都没有从浮点数或双精度数转换,但由于有符号整数溢出,它们都未定义。如果将强制转换显示为int,这可能有意义,因为类型强制转换的优先级高于算术运算。但是你表现出来的方式,我认为应该是一样的。@juanchopanza我仍然不确定真正的原因是什么,你是对的,当然,这不应该有什么区别。可能是表达式在某个点上具有不同精度的临时结果,或者可能发生溢出的不同点?
while(l>(unsigned int)(i*(i+1)*(2*i+1))/3) { // ...
      // ^^^^^^^^