Проблема с возведением в степень
- Войдите на сайт для отправки комментариев
Пнд, 22/10/2012 - 22:08
Здравствуйте!
Есть код, который выдаёт
int y=0;
int i=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
for (int i=0; i<9; i++)
{
y=pow(2,i);
Serial.print(i);
Serial.print(" ");
Serial.println(y);
delay(1000 / 2);
}
}
выдаёт следующее
0 1 1 2 2 3 3 7 4 15 5 31 6 63 7 127 8 255
Причем, тупо pow(2,2) даёт 4, pow(2,3) - 8 и т.д.
Есть идеи?
Ну прибавьте после 1 степени единицу и все получится ) Вот так вот оно округляется из double в int, обьявите так
Это проблеммы округления. То, ч что пишите «тупо», он использует byte, при округлении он отбрасыват дробную часть, а степень считает через экспоненту, а там операция деления. И еще. То, что пишите «тупо», он, скорее всего, считает еще при компиляции (оптимихирует).
Спасибо!
Функция POW очень ресурсоемкая. Я решал такую задачу проще.
код возводит 2 в степень bitnum:
uint16_t bitmask = 1; if (bitnum >0) { for (int i = 0; i < bitnum; ++i) { // bitmask <<= 1;