用C语言实现快速求平方根倒数算法
时间: 2023-10-29 20:06:10 浏览: 54
以下是用C语言实现快速求平方根倒数算法的代码:
```c
#include <stdio.h>
#include <math.h>
double sqrt_reciprocal(double x) {
union {
int i;
double d;
} u;
u.d = x;
u.i = 0x5fe6ec85e7de30da - (u.i >> 1);
return u.d;
}
int main() {
double x = 2.0;
double y = sqrt_reciprocal(x);
printf("sqrt(%.1f) = %.5f\n", x, sqrt(x));
printf("sqrt_reciprocal(%.1f) = %.5f\n", x, y);
printf("sqrt(%.1f) * sqrt_reciprocal(%.1f) = %.5f\n", x, x, sqrt(x) * y);
return 0;
}
```
该算法使用IEEE 754浮点数格式的位操作,通过对浮点数的二进制表示进行修改,来实现快速求平方根倒数的计算。
相关问题
c语言函数递归求平方根
以下是使用递归函数求平方根的C语言代码示例:
```c
#include <stdio.h>
double squareRoot(double n, double l, double h) {
double m = (l + h) / 2;
double diff = m * m - n;
if (diff < 0) {
diff = -diff;
}
if (diff <= 0.00001) {
return m;
} else if (m * m > n) {
return squareRoot(n, l, m);
} else {
return squareRoot(n, m, h);
}
}
int main() {
double n;
printf("请输入一个数字:");
scanf("%lf", &n);
printf("该数字的平方根为:%lf", squareRoot(n, 0, n));
return 0;
}
```
该程序使用二分法递归地求解平方根,其中l和h分别表示平方根的下限和上限,m为中间值,diff为中间值的平方与n的差值。如果diff小于等于0.00001,则返回中间值m,否则根据中间值的平方与n的大小关系,更新下限或上限,并递归调用函数。
用c编成实现模重复平方根的算法
以下是用C语言实现模重复平方根的算法的示例代码:
```c
#include <stdio.h>
#include <math.h>
int main() {
long long int n, a, b, c; // 使用 long long int 类型以支持大整数
int m, i;
printf("请输入一个正整数 n:");
scanf("%lld", &n);
m = sqrt(n);
if (m * m == n) {
printf("%lld 是完全平方数,它的平方根是 %d\n", n, m);
return 0;
}
a = m;
b = 1;
c = n;
for (i = 0; ; i++) {
m = (int)((a + sqrt(c)) / b);
a = m * b - a;
c = (n - a * a) / c * b * b;
b = c / b;
if (m * b == a && i != 0) { // 判断是否进入循环
printf("%lld 不是完全平方数,它的模重复平方根为 %d\n", n, i + 1);
return 0;
}
}
}
```
该程序首先读入一个正整数 $n$,然后判断它是否为完全平方数。如果是,则输出其平方根并结束程序;否则,使用模重复平方根的算法求出其模重复平方根并输出。其中,变量 $a$、$b$、$c$ 分别表示算法中的三个变量,变量 $m$ 为计算过程中的临时变量,变量 $i$ 用于记录循环次数(即模重复平方根的值)。