Функция pow. Некорректное число
- Войдите на сайт для отправки комментариев
Втр, 18/08/2015 - 15:05
Здравствуйте, написал простейший код:
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. Что я делаю не так?
Я долго тут объяснять не буду, но в 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 15Serial.println ( ( int ) ( x + 0.5 ) ); // избавляемся от неточностей плавающей арифметики