Почему Arduino не может справиться с высокоточными числами? - PullRequest
0 голосов
/ 11 июня 2018

В моем проекте мне нужно сделать некоторые вычисления с высокоточными числами.Но я заметил, что ответы не верны.Код ниже показывает, что я имею в виду.

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 голосов
/ 11 июня 2018

В большинстве Arduino двойной тип данных не существует.Все они заканчиваются тем, что были просто обычным поплавком.У Arduino просто нет сил играть с цифрами двойной точности.Сгенерированный код не оставит места для остальной части вашей программы.

Числа с плавающей точкой просто не такие точные.Они получают около 6 или 7 цифр точности.Довольно часто лучше использовать unsigned long и придерживаться математики с фиксированной запятой, чтобы вы могли получить не менее 9 цифр, и никаких аппроксимаций нет.

...