[STM32F7] FPU运算结果不对是精度问题?

[复制链接]
 楼主| Uriah 发表于 2025-5-5 07:58 | 显示全部楼层 |阅读模式
浮点算法和PC上算得不一样,是不是单精度导致的误差?
Clyde011 发表于 2025-5-5 07:59 | 显示全部楼层
用MATLAB导出的参数建议做归一化。
公羊子丹 发表于 2025-5-5 08:00 | 显示全部楼层
是不是用了float但运算超出精度了?
周半梅 发表于 2025-5-5 08:01 | 显示全部楼层
FPU默认用单精度的,double要特别处理。
帛灿灿 发表于 2025-5-5 08:02 | 显示全部楼层
你在Keil里选了硬件FPU没?
童雨竹 发表于 2025-5-5 08:02 | 显示全部楼层
用printf输出也会有精度截断的。
万图 发表于 2025-5-5 08:03 | 显示全部楼层
尽量少做连续减法,误差会叠加。
Wordsworth 发表于 2025-5-5 08:04 | 显示全部楼层
确保启用了FPU相关寄存器。
Bblythe 发表于 2025-5-5 08:05 | 显示全部楼层
我测过sin、cos,确实会偏。
Pulitzer 发表于 2025-5-5 08:06 | 显示全部楼层
你是不是混用了float和int?
 楼主| Uriah 发表于 2025-5-5 08:06 | 显示全部楼层
会不会是优化等级太高影响表达式顺序?
夜阑风雨 发表于 2025-5-13 14:31 | 显示全部楼层
STM32F7上使用FPU(浮点运算单元)进行计算时,若结果与PC上不一致,通常由精度差异、编译器优化、算法实现差异或硬件限制导致

别乱了阵脚 发表于 2025-5-13 19:40 | 显示全部楼层
单精度 vs 双精度:STM32F7FPU支持单精度(32位)浮点运算,而PC(如x86)可能默认使用双精度(64

一秒落纱 发表于 2025-5-13 20:11 | 显示全部楼层
优化级别差异,PC编译器(如GCC/MSVC)可能启用更激进的优化(如自动向量化、指令重排),而嵌入式编译器(如ARM GCC)可能因资源限制优化较弱。

暖了夏天蓝了海 发表于 2025-5-13 20:52 | 显示全部楼层
不同编译器可能生成不同的FPU指令序列(如VADD.F32 vs VMLA.F32),导致精度细微差异。

远山寻你 发表于 2025-5-13 21:21 | 显示全部楼层
STM32F7Cortex-M7 FPU基于ARMv7-M架构,与PCx86 FPUSSE/AVX指令集不同,运算顺序和舍入模式可能不同

光辉梦境 发表于 2025-5-13 22:01 | 显示全部楼层
默认舍入模式为“最近偶数舍入”,与PC可能不一致,导致边界值差异

三生万物 发表于 2025-5-13 22:59 | 显示全部楼层
嵌入式代码中若频繁将浮点结果转换为整数(如(int)value),会丢失精度
江河千里 发表于 2025-5-13 23:10 | 显示全部楼层
数值算法(如牛顿迭代法)对初始值敏感,微小差异可能导致结果发散或收敛到不同解

淡漠安然 发表于 2025-5-13 23:43 | 显示全部楼层
强制双精度计算(PC端):在PC代码中显式使用double类型,避免隐式转换为单精度。嵌入式端启用双精度(若硬件支持):STM32F7FPU不支持硬件双精度,但可通过软件模拟(如long double),但性能极低

您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

5820

帖子

1

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