[应用方案] 开根号算法

[复制链接]
i1mcu 发表于 2025-1-21 22:38 | 显示全部楼层
#include <stdio.h>

int sqrt_binary_search(int N) {
    int low = 0, high = N, mid;
    while (low <= high) {
        mid = low + (high - low) / 2;
        if (mid * mid == N) return mid;
        if (mid * mid < N) {
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    return high;  // 返回小于等于平方根的最大整数
}

int main() {
    int number = 25;
    int result = sqrt_binary_search(number);
    printf("The integer square root of %d is %d\n", number, result);
    return 0;
}
houjiakai 发表于 2025-1-21 22:59 | 显示全部楼层
现代处理器通常包含专门的浮点运算单元(FPU),这些单元能够高效地执行平方根等复杂数**算。确保编译器和代码设置能够充分利用这些硬件特性。
10299823 发表于 2025-1-23 12:04 | 显示全部楼层
double myApproxSqrt(double a) {
    int n = (int)sqrt(a);  // 先得到最接近的整数
    double x = (a - n * n) / (n * n);
    double result = n * (1 + x / 2 - x * x / 8 + x * x * x / 16);
    return result;
}
benjaminka 发表于 2025-1-23 14:51 | 显示全部楼层
如果是对一组固定的数频繁求开根号,可以预先计算这些数的平方根并存储在一个查找表中。在实际运行时,直接从表中获取结果,避免重复计算。不过这种方法需要占用一定的存储空间来存放查找表。
wangjiahao88 发表于 2025-1-23 15:45 | 显示全部楼层
一般场景使用DSP-LIB就可以了啊
V853 发表于 2025-1-23 20:54 | 显示全部楼层
如果您需要实现自己的平方根算法,二分搜索法方法是一种简单且相对高效的方法。
朝生 发表于 2025-1-24 07:23 | 显示全部楼层
原理是什么?我需要解释一下原理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部