Wenn du Programmieranfänger bist kann ich nur raten, wenn etwas nicht funktioniert, versuch herauszufinden und zu verstehen worin genau das Problem liegt.
Sonst wirst du den selben Fehler wahrscheinlich immer und immer wieder machen.
In diesem Fall liegt das Problem darin daß du nicht berücksichtigt hast daß die pow()-Funktion als Ergebnis eine Fließkommazahl zurückgibt, und daß int() nicht rundet sondern die Nachkommastellen abschneidet. Du könntest dein ursprüngliches Programm also reparieren indem du eine Rundungsfunktion einbaust.
Die Lösung mit Bitset ist natürlich viel effizienter da sie keine komplizierten mathematischen Funktionen und Typkonvertierungen benötigt.
Fleißkommazahlen sind etwas ungenau. Sie sind auf 6 bis 7 Stellen genau aber eben nicht 100%.
2^2 müßte 4 ergeben aber in Wahrheit ergibt es etwas wie 3,99999 wei funktionen wie POW, SQR, sin, cos, tan ecc mitels Polinome berechent werden und nicht diskret. . In int gewandelt ist das dann 3 .
Daum ist das inkrementieren b zw Decrementieren einen Fleißkommazahl bei einem bestimmten Wert schluß.
Das ist nicht nur einen Arduinoeigenheit sonder auch der PC macht sowas.