Почему этот простой код печатает неправильное значение - PullRequest
0 голосов
/ 17 апреля 2020
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);

Serial.println(4294967.0 * 200.0);
}

void loop() {
  // put your main code here, to run repeatedly:

}

выход: 858993408,00

, когда должно быть 858993400,00

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

попробуйте с типизацией обеих переменных с двойным и и передайте его.

Serial.println((double)4294967.0 * (double)200.0);

Я не скомпилировал и не протестировал. Я думаю, что это должно работать. Или же преобразовать его в тип LONG и использовать его.

0 голосов
/ 17 апреля 2020

В Arduino переменные типа с плавающей запятой имеют 32-битное значение с плавающей запятой. Таким образом, они имеют точность около 6 или 7 цифр. Дело в числах с плавающей запятой, способ, которым они могут представлять больший диапазон, чем значения, которые они содержат, в том, что они не содержат значения точно.

Если вы хотите работать с точными значениями, вы не можете использовать плавающую точку. Преобразование в целые числа и использование математики с фиксированной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...