#include <iostream>
using namespace std;
int main()
{
double n;
cin >> n;
if (n > 0)
{
if (n >= 1)
{
double l = 0, r = n;
while (r - l > 1e-8)
{
double mid = (l + r) / 2.0;
if (mid * mid * mid >= n)r = mid;
else l = mid;
}
printf("%lf", l);
}
else
{
double l = n, r = 1;
while (r - l > 1e-8)
{
double mid = (l + r) / 2.0;
if (mid * mid * mid >= n)r = mid;
else l = mid;
}
printf("%lf", l);
}
}
else
{
if (n <= -1)
{
double l = 1, r = n;
while (l - r > 1e-8)
{
double mid = (l + r) / 2.0;
if (mid * mid * mid <= n)r = mid;
else l = mid;
}
printf("%lf", l);
}
else
{
double l = n, r = -1;
while (l - r > 1e-8)
{
double mid = (l + r) / 2.0;
if (mid * mid * mid <= n)r = mid;
else l = mid;
}
printf("%lf", l);
}
}
return 0;
}
浮点数二分法比整数二分法简单,不需要去注意边界问题。但是在这道开根题中,输入数据在(-1,1)这个区间内的时候,要着重注意,因为此时左右边界会出现问题(因为0.1 * 0.1 = 0.01 < 0.1)