在C言语编程中,开方运算是一个基本且罕见的数学操纵。但是,因为C言语标准库中并不直接供给开方函数,因此,实现开方运算须要顺序员手动编写算法。本文将探究多少种高效的开方算法,并供给实战技能,帮助读者破解C言语开方打算困难。
最简单的方法是直接利用C言语标准库中的sqrt()
函数。该函数位于<math.h>
头文件中,可能打算非负实数的平方根。
#include <stdio.h>
#include <math.h>
int main() {
double number = 16.0;
double result = sqrt(number);
printf("The square root of %.2f is %.2f\n", number, result);
return 0;
}
sqrt()
函数只能处理非正数,对正数输入,会前去一个非数(NaN)。double
范例,打算成果也是双精度浮点数。当不须要利用标准库函数,或许为了进步效力或懂得算法时,可能利用二分查找(二分法)算法实现开方。
#include <stdio.h>
double newSqrt(double n, double low, double high) {
double mid, tmp;
while (low < high) {
mid = (low + high) / 2.0;
tmp = mid * mid;
if (tmp > n) {
high = mid;
} else {
low = mid;
}
}
return low;
}
int main() {
double number = 200;
double result = newSqrt(number, 0, number);
printf("The square root of %.2f is %.2f\n", number, result);
return 0;
}
牛顿迭代法是一种更高效的数值逼近方法,可能用于打算实数的平方根。
#include <stdio.h>
#include <math.h>
double newtonSqrt(double n) {
double last = 0;
double res = 1;
while (res != last) {
last = res;
res = (res + n / res) / 2;
}
return res;
}
int main() {
double number = 200;
double result = newtonSqrt(number);
printf("The square root of %.2f is %.2f\n", number, result);
return 0;
}
sqrt()
函数是最便利的方法。经由过程本文的探究,信赖读者曾经对C言语中的开方打算有了更深刻的懂得。控制这些高效算法跟实战技能,可能帮助读者在编程现实中愈加随心所欲。