Uriah 发表于 2025-5-5 07:58

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

浮点算法和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 双精度:STM32F7的FPU支持单精度(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

STM32F7的Cortex-M7 FPU基于ARMv7-M架构,与PC的x86 FPU或SSE/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类型,避免隐式转换为单精度。嵌入式端启用双精度(若硬件支持):STM32F7的FPU不支持硬件双精度,但可通过软件模拟(如long double),但性能极低
页: [1]
查看完整版本: FPU运算结果不对是精度问题?