为什么Arduino无法处理高精度数字?

时间:2018-06-10 23:26:32

标签: arduino arduino-uno

在我的项目中,我需要用高精度数字进行一些计算。但我注意到答案是不正确的。下面的代码显示了我的意思。

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中处理这种精度呢?

1 个答案:

答案 0 :(得分:2)

在大多数Arduino上,双数据类型不存在。他们最终真的只是常规浮动。 arduino只是没有肌肉来玩双精度数字。生成的代码不会为您的其他程序留出空间。

浮点数不是那么精确。它们获得大约6或7位数的精度。通常最好使用无符号长并坚持使用定点数学,这样你就可以获得至少9位数,并且没有任何近似值。