#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double Mysqrt(double n) {
double max = n;
double min = 0;
double mid = (max + min) / 2;
while (fabs(mid * mid - n) > 1e-10) {
if (mid * mid < n)
min = mid;
else if (mid * mid > n)
max = mid;
else
return mid;
mid = (max + min) / 2;
}
return mid;
}
int main() {
double n;
cout << "请输入一个数:";
cin >> n;
cout << fixed << setprecision(10);
cout <<"\n二分法计算结果:"<< Mysqrt(n)<<"\n\n";
cout <<"直接调用sqrt函数的结果:"<< sqrt(n)<<"\n";
return 0;
}
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double Mysqrt(double n) {
double x = 1.0;
while (fabs(x * x - n) > 1e-10) {
x = (x + n / x) / 2;
}
return x;
}
int main() {
double n;
cout << "请输入一个数:";
cin >> n;
cout << fixed << setprecision(10);
cout <<"\n二分法计算结果:"<< Mysqrt(n)<<"\n\n";
cout <<"直接调用sqrt函数的结果:"<< sqrt(n)<<"\n";
return 0;
}
下面的有一点小瑕疵,就是我只在main.cpp文件中#include"bisection.h"
或#include"newton.h",其实应该两个都导入,我在最下面给出了两个文件都导入的示例了,下面的可以跳过,但是一些实现过程还是要了解的
bisection.h
#ifndef _BISECTION_H
#define _BISECTION_H
double bisection(double n);
#endif
bisection.cpp
#include"bisection.h"
#include<cmath>
double bisection(double n) {
double max = n;
double min = 0;
double mid = (max + min) / 2;
while (fabs(mid * mid - n) > 1e-10) {
if (mid * mid < n)
min = mid;
else if (mid * mid > n)
max = mid;
else
return mid;
mid = (max + min) / 2;
}
return mid;
}
main.cpp
#include<iostream>
#include<iomanip>
#include<cmath>
#include"bisection.h"
using namespace std;
int main() {
double n;
cout << "请输入一个数:";
cin >> n;
cout << fixed << setprecision(10);
cout <<"\n二分法计算结果:"<< bisection(n)<<"\n\n";
cout <<"直接调用sqrt函数的结果:"<< sqrt(n)<<"\n";
return 0;
}
Makefile
#MakeFile
main: main.o bisection.o
g++ main.o bisection.o -o main
main.o: src/main.cpp include/bisection.h
g++ -c src/main.cpp -I include
bisection.o:src/bisection.cpp include/bisection.h
g++ -c src/bisection.cpp -I include
同理:
newton.h
ifndef _NEWTON_H
#define _NEWTON_H
double newton(double n);
#endif
newton.cpp
include"newton.h"
#include<cmath>
double newton(double n){
double x = 1.0;
while (fabs(x * x - n) > 1e-10) {
x = (x + n / x) / 2;
}
return x;
}
main.cpp
#include<iostream>
#include<iomanip>
#include<cmath>
#include"newton.h"
using namespace std;
int main() {
double n;
cout<<"-----Newton-------\n";
cout << "请输入一个数:";
cin >> n;
cout << fixed << setprecision(10);
cout <<"\n二分法计算结果:"<< newton(n)<<"\n\n";
cout <<"直接调用sqrt函数的结果:"<< sqrt(n)<<"\n";
return 0;
}
MakeFile
#MakeFile
main: main.o newton.o
g++ main.o newton.o -o main
main.o: src/main.cpp include/newton.h
g++ -c src/main.cpp -I include
newton.o:src/newton.cpp include/newton.h
g++ -c src/newton.cpp -I include
.PHONY:clean
clean:
rm *.o main
#include"bisection.h"和#include"newton.h"都导入
mainc.pp
#include<iostream>
#include<iomanip>
#include<cmath>
#include"bisection.h"
#include"newton.h"
using namespace std;
int main() {
double n;
cout << fixed << setprecision(10);
cout<<"-----bisection-------\n";
cout << "请输入一个数:";
cin >> n;
cout <<"\n二分法计算结果:"<< newton(n)<<"\n\n";
cout <<"直接调用sqrt函数的结果:"<< sqrt(n)<<"\n\n\n";
cout<<"-----Newton-------\n";
cout << "请输入一个数:";
cin >> n;
cout <<"\n二分法计算结果:"<< newton(n)<<"\n\n";
cout <<"直接调用sqrt函数的结果:"<< sqrt(n)<<"\n";
return 0;
}
#MakeFile
main: main.o newton.o bisection.o
g++ main.o newton.o bisection.o -o main
main.o: src/main.cpp include/newton.h include/bisection.h
g++ -c src/main.cpp -I include
newton.o:src/newton.cpp include/newton.h
g++ -c src/newton.cpp -I include
bisection.o:src/bisection.cpp include/bisection.h
g++ -c src/bisection.cpp -I include
.PHONY:clean
clean:
rm *.o main