给定一个浮点数 n,求它的三次方根。
输入格式
共一行,包含一个浮点数 n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。
数据范围
−10000≤n≤10000
输入样例:
1000.00
输出样例:
10.000000
思路
本题为浮点数的二分,和整形二分有所区别,其中关于mid的划分问题,每次左右边界不需要在+1或者-1操作了,因为对于浮点型的数据来说,他的区间可以划分的很细很细,例如0.01可能mid的临界点不再相差1了,所以这里可以直接用l = mid 和r = mid 来更新区间,缩小范围。
然后这里有个值得注意的是,关于答案求解精度为小数6位,这里需要进行增加精度,至1e-8是因为计算机计算浮点数的时候会存在误差,所以计算更高精度,然后输出更低精度的数据,降低计算机计算误差。
代码示例:
#include <iostream>
using namespace std;
int main()
{
double x;
cin >> x;
double l = -10000, r = 10000;
while (r - l > 1e-8)
{
double mid = (l + r ) / 2;
if ( mid * mid * mid >= x) r = mid;
else l = mid;
}
printf("%.6lf\n",l);
}