【发布时间】:2016-12-05 12:59:02
【问题描述】:
我需要找到给定数字 (x) 的第 n 次根。 x 可以大到 1e12 和 n 可以大到 50。floor(pow(64,1.0/3)) 返回 3,请帮我解决这个问题,如果不能请您建议一个替代方案,牢记?
编辑:我知道浮点精度,我想问在这种情况下应该有什么替代方案。
甚至下面的代码也会返回True
double x = pow(64,1.0/3);
return x==(int)x;
【问题讨论】:
-
因为 3.999999999 的下限是 3 而不是 4。将结果视为小数而不是整数。
-
而
1.0/3不完全是三分之一。浮点数只是实数的近似值。 -
这就是我要求替代方案的原因:/
-
“替代方案”是实现浮点值是什么(十进制实数的二进制表示),因此它们是近似值,如前所述。您必须认识到这一点并相应地重新安排您的计算。
-
底层的resp到底是什么。周边问题?为什么要排除使用
round(pow(64,1.0/3))来获取最接近结果的整数?