打印
[STM32F7]

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

[复制链接]
327|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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要特别处理。

使用特权

评论回复
5
帛灿灿| | 2025-5-5 08:02 | 只看该作者
你在Keil里选了硬件FPU没?

使用特权

评论回复
6
童雨竹| | 2025-5-5 08:02 | 只看该作者
用printf输出也会有精度截断的。

使用特权

评论回复
7
万图| | 2025-5-5 08:03 | 只看该作者
尽量少做连续减法,误差会叠加。

使用特权

评论回复
8
Wordsworth| | 2025-5-5 08:04 | 只看该作者
确保启用了FPU相关寄存器。

使用特权

评论回复
9
Bblythe| | 2025-5-5 08:05 | 只看该作者
我测过sin、cos,确实会偏。

使用特权

评论回复
10
Pulitzer| | 2025-5-5 08:06 | 只看该作者
你是不是混用了float和int?

使用特权

评论回复
11
Uriah|  楼主 | 2025-5-5 08:06 | 只看该作者
会不会是优化等级太高影响表达式顺序?

使用特权

评论回复
12
夜阑风雨| | 2025-5-13 14:31 | 只看该作者
STM32F7上使用FPU(浮点运算单元)进行计算时,若结果与PC上不一致,通常由精度差异、编译器优化、算法实现差异或硬件限制导致

使用特权

评论回复
13
别乱了阵脚| | 2025-5-13 19:40 | 只看该作者
单精度 vs 双精度:STM32F7FPU支持单精度(32位)浮点运算,而PC(如x86)可能默认使用双精度(64

使用特权

评论回复
14
一秒落纱| | 2025-5-13 20:11 | 只看该作者
优化级别差异,PC编译器(如GCC/MSVC)可能启用更激进的优化(如自动向量化、指令重排),而嵌入式编译器(如ARM GCC)可能因资源限制优化较弱。

使用特权

评论回复
15
暖了夏天蓝了海| | 2025-5-13 20:52 | 只看该作者
不同编译器可能生成不同的FPU指令序列(如VADD.F32 vs VMLA.F32),导致精度细微差异。

使用特权

评论回复
16
远山寻你| | 2025-5-13 21:21 | 只看该作者
STM32F7Cortex-M7 FPU基于ARMv7-M架构,与PCx86 FPUSSE/AVX指令集不同,运算顺序和舍入模式可能不同

使用特权

评论回复
17
光辉梦境| | 2025-5-13 22:01 | 只看该作者
默认舍入模式为“最近偶数舍入”,与PC可能不一致,导致边界值差异

使用特权

评论回复
18
三生万物| | 2025-5-13 22:59 | 只看该作者
嵌入式代码中若频繁将浮点结果转换为整数(如(int)value),会丢失精度

使用特权

评论回复
19
江河千里| | 2025-5-13 23:10 | 只看该作者
数值算法(如牛顿迭代法)对初始值敏感,微小差异可能导致结果发散或收敛到不同解

使用特权

评论回复
20
淡漠安然| | 2025-5-13 23:43 | 只看该作者
强制双精度计算(PC端):在PC代码中显式使用double类型,避免隐式转换为单精度。嵌入式端启用双精度(若硬件支持):STM32F7FPU不支持硬件双精度,但可通过软件模拟(如long double),但性能极低

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

4896

帖子

1

粉丝