Проблема с возведением в степень
- Войдите на сайт для отправки комментариев
Пнд, 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: