Функция pow. Некорректное число

pomkka
Offline
Зарегистрирован: 18.08.2015

Здравствуйте, написал простейший код:

void loop()
{
  if (Serial.available() > 0)
  {
    data = Serial.parseInt();
    if (data != 0)
    {
      data = data - 1;
      result = pow(2,data);    
      digitalWrite(LATH, LOW);
      shiftOut(SER, CLK, MSBFIRST, result);
      Serial.println(result);
      digitalWrite(LATH, HIGH);        
    }
        
  }

}

Почему-то на выводе у меня число в степени двойки и минус один, т.е ввожу 5, должен вывести 32, а по факту 31. Что я делаю не так?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Я долго тут объяснять не буду, но в AVR нет FPU (мат сопроцессор) отсюда такая каша

тип переменной result должен быть double !

подозреваю что он int :)

 

.
for (int n=0;n<5;n++)
{
    double x = pow(2,n);
    Serial.print(n); 
    Serial.print(" ");
    Serial.print(x);
    Serial.print(" ");
    Serial.println((int)x); 
}

0 1.00 1
1 2.00 2
2 4.00 3
3 8.00 7
4 16.00 15

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Serial.println ( ( int ) ( x + 0.5 ) ); // избавляемся от неточностей  плавающей арифметики