首页 > 解决方案 > STM32L4xx 浮点数很远

问题描述

众所周知,这float并不double总是准确的,但这通常会到达小数位。在我的应用程序中,该数字不在任何可用结果的范围内

此函数从数组中接收 uint32_t

volatile uin32_t adc3 =  hw_ADC_Get(position)

由于这是一个整数并且输出应该以伏特为单位,因此必须将其转换为浮点值。这是通过以下方式完成的:

// divide reference by range, 3000mV/4096bit
float c_factor = float(3000)/4096.0;
// multiply the measured range number by the factor to get the voltage
float v_in = c_factor * float(adc3); 
//multiply voltage with voltage divider ratio, to get real voltage
float v_real = 1.823529179354124 * v_in;

调试结果如下

adc3 = 2767
c_factor = 0.737281859
v_in = 540095319  (should be 2040.05)
v_real = 944263180 ( should be 984’879’573.82 inherited from v_in error)

因此,两个浮点操作似乎都失败了,首先是 v_in,然后是 v_real。

所描述的问题发生在 STM32L4xx 系列微控制器上。

这种行为的原因/解决方案可能是什么?

标签: c++stm32

解决方案


推荐阅读