如何不用库函数实现根号的求值

今天和朋友聊面经,说到一道题目,如何不用库函数求根号,并且能用函数的输入参数来控制误差,他想了一个比较牛逼的方法,小数转整数,然后二分查找。在那么短的时间想到这个地步真是不错,但是我貌似记得科学计算的课上说过类似的东西,用泰勒计算:

其实想到了这个其他的都比较简单了,贴一下代码:

#include #include using namespace std; #define _DEBUG //(1+x)^t = 1+ t*x + t*(t-1)/(t!)8x^2+...+t*(t-1)(t-2)...(t-n+1)/(t!)*x^n const double alpha = 0.5; int main(int argc,char **argv) { if(argc!=2) return 0; double x,y, error = atof(argv[1]), n = 1.0,//int最大只能算12的阶乘! temp_a = alpha, temp = 100.0; cin>>y; x = y-1; y = 1.0; int i = 1; while(abs(temp) > error) { y+=temp_a/n*x; n*=(i+1); temp_a*=(alpha-i); x*=x; temp = temp_a/n*x; ++i; } cout<<"i= "<

你可能感兴趣的:(算法)