c++ - 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 系列微控制器上。
这种行为的原因/解决方案可能是什么?
解决方案
推荐阅读
- line - 更漂亮:如何在部分之间强制设置 1 条间距线?
- error-handling - 广播消息的接收者如何跟踪控制+有效负载
- python - 使用 OpenCV 测量面积的最佳方法
- python - 在执行多处理期间,函数运行次数更多
- r - 如何使用 ggplot2 删除 facet_wrap 图中的额外列?
- vulkan - 顶点位置的 Vulkan 默认坐标系统
- javascript - React Navigation 参数不会因路线而改变的原因是什么?
- c - 如何在 C 中编写代码,要求用户正确创建至少 3 个字符和一个大写字母的密码?
- mongodb - 即使集合为空,也会出现重复错误
- php - 如果用户未登录且产品可变,则更改添加到购物车文本 Woocommerce