arduino - 为什么 Arduino 不能处理高精度数字?
问题描述
在我的项目中,我需要使用高精度数字进行一些计算。但我注意到答案不正确。下面的代码说明了我的意思。
void setup() {
Serial.begin(9600);
double l = 32.48750458;
double n = 32.48751068;
double im = l - n;
double im1 = im * 0.605;
double cs = 32.48751068 + im;
Serial.println(l, 8);
Serial.println(n, 8);
Serial.println(im1, 8);
Serial.println(cs, 8);
}
void loop() {
}
此代码在串行监视器上的输出是:
32.48750305
32.48751068
-0.00000462
32.48750305
那么如何在 Arduino 中处理这种精度呢?
解决方案
在大多数 Arduino 上,双重数据类型不存在。他们最终都只是普通的浮动。arduino 只是没有能力玩双精度数字。生成的代码不会为您的程序的其余部分留出空间。
浮点数并不是那么精确。他们得到大约 6 或 7 位的精度。通常最好使用 unsigned long 并坚持使用定点数学,这样您就可以获得至少 9 位数字并且没有任何近似值。
推荐阅读
- java - 如何在服务器上运行 sparkjob 时修复“用户 root(用户 id 0)已被拒绝访问以创建 application_1558587698997_88549”错误?
- python - 当我从零售类调用方法时,我的代码不起作用
- asp.net - 类似于 .NET 中的“稀疏字段集”
- fullpage.js - fullpage.js 和midnight.js 不需要的奇怪的淡入淡出过渡
- ios - 数据库获取只存在于它自己的函数中
- javascript - 在 .map 内排序会影响原始数组,而不是返回新数组
- c# - 如何逐步将 Image TranslateTranform 应用于图像(跳几个像素)
- php - 有人能想知道为什么 select 语句没有像我打算的那样处理变量吗?
- python - 如何解决 Tkinter 上的 CSV 列表问题
- ruby-on-rails - 我想为我的 Rails 应用程序中的项目设置某些标志,想知道是否应该扩展我的 Tag 类或创建一个全新的 Flag 类?