手撕开方sqrt(),要求不能使用自带的math库等
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
#include <vector>
#include "limits.h"
using namespace std;
float abss( float a, float b){
if( a < b)
return b-a;
else
return a-b;
}
//开方:math不能用
float sqrt(float m, float err){
float low = 0, high = m;
float anws = (low+high)/2;
while( abss(m, anws*anws) > err ){
if( anws*anws < m ){
low = anws;
}else{
high = anws;
}
anws = (low+high)/2;
}
return anws;
}
int main(int argc, const char * argv[]) {
cout << sqrt(2.0, 0.1) << endl;
cout << sqrt(2.0, 0.001) << endl;
cout << sqrt(4.0, 0.001) << endl;
cout << sqrt(-4.0, 0.001) << endl;
return 0;
}