众所周知,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系列微控制器上。
此行为的可能原因/解决方案是什么?