#include<iostream>
#include<cmath>
using namespace std;
double Q_cbrt(double number)
{
long long i;
double x2, y;
const double twothird = 0.66667;
x2 = number * 0.5;
y = number;
i = * (long long *) &y;
i = 3071319837877857280ll + i / 3;
y = * (double *) &i;
y = twothird * (y + x2 / y / y);
y = twothird * (y + x2 / y / y);
y = twothird * (y + x2 / y / y);
return y;
}
int main()
{
double x;
cin >> x;
cout << floor(Q_cbrt(x)) << endl;
}
模仿的《雷神之锤Ⅲ》的平方反根算法。然而第7个点炸了,结果比答案大1。
多加几次牛顿迭代也没用。