[STM32F1] 有些除法结果为零

[复制链接]
685|2
Hitomi22 发表于 2025-9-17 22:32 | 显示全部楼层 |阅读模式
我正在做一个小项目,需要使用一个变量来保存PWM频率,STM32F103中有些除法结果为零,而实际结果应为浮点数而非零?为了计算周期,写了一个除法运算:1/test_float,结果应该是浮点数周期……但结果却是零。

我使用的是Blue Pill开发板(STM32F103)和STM32Cube IDE。

我运行了以下简单示例来展示这个问题:

float test_float = 0;

test_float = 1/10;    // ====> test_float=0
test_float = 1/1000;   // ====> test_float=0
test_float = 1/10000000; // ====> test_float=0
test_float = 0.0000001;  // ====> test_float= 9.9999999999999995e-008 (正确)
为什么前四行结果为零?最后一行(test_float = 0.0000001;)得到了正确值(100 ns)

sjnh 发表于 2025-9-18 07:27 | 显示全部楼层
这是C语言的特点,float test_float = 1 / 10;  实际过程是:首先右侧计算中没有浮点数,所以都按照整数计算结果=0,再把0转换成浮点数赋值给test_float; (不是先转换成浮点数再做除法);
例如 float v = 3/2; 结果是v=1,不是1.5;
要想正确必须是 1.0/10
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

59

帖子

0

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