[STM32F1] 浮点类型变量在stm32cube_ide中不正常

[复制链接]
294|17
地瓜patch 发表于 2025-10-8 11:30 | 显示全部楼层 |阅读模式
定义了一个浮点变量

float r = 3.14;

当调试时,r的值显示为3,通过使用if条件进行了验证。

if(r==3.14)

这个if条件不成立,这意味着ide中的浮点变量无法正常工作。

643757107 发表于 2025-10-8 21:49 | 显示全部楼层
你遇到的问题是浮点数在计算机中的精度表示问题,并不是 IDE 或编译器无法正常工作。
643757107 发表于 2025-10-8 21:49 | 显示全部楼层
实际上,由于 3.14 在十进制中是一个有限小数,但在二进制浮点数中可能无法精确表示,因此它会被存储为一个近似值。

当你用 if(r == 3.14) 判断时,要注意:

字面量 3.14 默认是 double 类型

r 是 float 类型

比较时,r 会被提升为 double,但它的精度比直接赋值的 double 低,因此可能不相等
643757107 发表于 2025-10-8 21:49 | 显示全部楼层
#include <stdio.h>

int main() {
    float r = 3.14;
    printf("r = %.10f\n", r);       // 打印更多小数位
    printf("3.14 = %.10f\n", 3.14); // 打印 double 类型的 3.14
    return 0;
}
643757107 发表于 2025-10-8 21:50 | 显示全部楼层
5655268e66c24811b3.png

看吧,知道为哈了吗
643757107 发表于 2025-10-8 21:51 | 显示全部楼层
这不是 IDE 或编译器的 bug,而是浮点数的本质特性。

不要直接用 == 比较浮点数,应使用误差范围比较。

在赋值和比较时注意类型一致(float 与 3.14f,double 与 3.14)。
 楼主| 地瓜patch 发表于 2025-10-9 09:30 | 显示全部楼层
643757107 发表于 2025-10-8 21:51
这不是 IDE 或编译器的 bug,而是浮点数的本质特性。

不要直接用 == 比较浮点数,应使用误差范围比较。

感谢回复,请问在if中判断这个浮点数的话,应该怎么写判断这个范围呢?if(r > 3 && r < 4)这样判断范围么
classroom 发表于 2025-10-9 10:10 | 显示全部楼层
STM32F1系列没有硬件浮点单元
cr315 发表于 2025-10-9 11:11 | 显示全部楼层
硬件浮点支持未启用,STM32F1无硬件FPU。
duo点 发表于 2025-10-9 12:12 | 显示全部楼层
项目配置错误,可能导致浮点运算异常。
elephant00 发表于 2025-10-9 10:12 | 显示全部楼层
编译器优化或调试器显示问题
flycamelaaa 发表于 2025-10-9 13:13 | 显示全部楼层
浮点数在内存中可能存在微小误差
jcky001 发表于 2025-10-9 14:14 | 显示全部楼层
变量可能未正确初始化。
onlycook 发表于 2025-10-9 15:14 | 显示全部楼层
更新调试器驱动到最新版本。
powerantone 发表于 2025-10-9 16:19 | 显示全部楼层
可能是IDE调试器的问题。
probedog 发表于 2025-10-9 19:16 | 显示全部楼层
检查编译器和库配置是否有误。
stormwind123 发表于 2025-10-9 19:16 | 显示全部楼层
用软件浮点库。
七毛钱 发表于 2025-10-9 20:37 | 显示全部楼层
可能是项目配置问题,检查一下优化级别、微库和浮点抽象设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1943

主题

15258

帖子

31

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