[N32G45x] sqrt的快速算法

[复制链接]
2360|41
tifmill 发表于 2025-2-5 21:05 | 显示全部楼层
快速平方根倒数算法              
louliana 发表于 2025-2-5 21:59 | 显示全部楼层
通过位运算和移位操作来加速计算。这种方法不需要浮点运算,适用于资源受限的环境,如单片机
primojones 发表于 2025-2-5 22:53 | 显示全部楼层
牛顿迭代法是一种在实数域和复数域上近似求解方程的方法。
mickit 发表于 2025-2-6 12:11 | 显示全部楼层
牛顿迭代法的收敛速度很快,通常在几次迭代后就能得到比较精确的结果
maudlu 发表于 2025-2-6 12:57 | 显示全部楼层

计算平方根的快速算法有很多              
linfelix 发表于 2025-2-6 18:58 | 显示全部楼层
连分数展开法、数值逼近法等。              
plsbackup 发表于 2025-2-6 19:56 | 显示全部楼层
算法的核心思想是通过牛顿迭代法来逼近平方根的值。
51xlf 发表于 2025-2-13 16:53 | 显示全部楼层
查询速度快,适用于对固定范围内的数值频繁进行平方根计算的情况,能够大大减少计算时间。
robincotton 发表于 2025-2-13 18:35 | 显示全部楼层
牛顿迭代法:这是一种常用的数值方法,通过迭代逼近平方根。
biechedan 发表于 2025-2-13 20:18 | 显示全部楼层
import struct

def fast_inverse_sqrt(x):
    i = struct.unpack('<I', struct.pack('<f', x))[0]
    i = 0x5f3759df - (i >> 1)
    y = struct.unpack('<f', struct.pack('<I', i))[0]
    # 牛顿迭代一次提高精度
    y = y * (1.5 - 0.5 * x * y * y)
    return y

def fast_sqrt_quake(x):
    return x * fast_inverse_sqrt(x)

# 测试
num = 9
result = fast_sqrt_quake(num)
print(f"Quake III算法计算的平方根: {result}")
eefas 发表于 2025-2-14 09:08 | 显示全部楼层
float InvSqrt(float x)
{
    float xhalf = 0.5f * x;
    int i = *(int*)&x;
    i = 0x5f3759df - (i >> 1); // 计算第一个近似根
    x = *(float*)&i;
    x = x * (1.5f - xhalf * x * x); // 牛顿迭代法
    return x;
}
eefas 发表于 2025-2-14 11:04 | 显示全部楼层
标准的 sqrt 函数虽然精度高,但计算速度相对较慢
weifeng90 发表于 2025-2-18 23:06 来自手机 | 显示全部楼层
可以转换成整数计算
物联万物互联 发表于 2025-2-27 11:43 | 显示全部楼层
sqrt法就是用一个不断逼近的方式来找到方程的近似解,就是逐步调整数值,越来越接近真实答案。
地瓜patch 发表于 2025-2-27 12:10 来自手机 | 显示全部楼层
二分法的开方计算方法
芯路例程 发表于 2025-3-3 13:38 | 显示全部楼层
平方根快速算法包括二分法、牛顿迭代法等,可大幅提高计算效率
未来AI 发表于 2025-3-5 07:58 | 显示全部楼层
二分法开方计算:先猜测一个数值范围,再逐渐缩小范围,逼近真实值
digit0 发表于 2025-3-8 09:09 | 显示全部楼层
sqrt的快速算法:使用二分查找法逼近真实值,初始设定区间中点为近似值,逐渐缩小范围至误差范围内得到最终结果。
LinkMe 发表于 2025-5-17 07:18 | 显示全部楼层
牛顿迭代法就是像猜谜一样,每次都猜得更接近真实值,直到猜得差不多为止。
土星共同体 发表于 2025-5-19 09:20 | 显示全部楼层
难道没有人注意到,M4/M7里面有浮点处理器时,有单精度的浮点开方指令吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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