Die Float Zahl ist und der exponent ist in Binärformat gespeichert. Auch wenn Du den Exponenten extrahierst und dezimal ausgibst ist er aller Wahrscheinlichkeit wegen der Umrechnung falsch.
Grüße Uwe
Wenn dir 2 Nachkommastellen nicht reichen, mach doch z.B.
float x = PI;
Serial.println(x,6);
Ansonsten nimm sowas wie
union {float f; byte b[4];} test;
test.f = PI;
int pow = (test.b[3] & 0x7f) - 0x3f; //entspricht ca. log2(f) / 2
Wenn du log nicht willst, möchtest du sicher auch keine float Multiplikation,
sonst könntest du natürlich (mit Rundungsfehlers) aus einem log2 einen log10 machen...
geht nur auf little endians mit der üblichen float-Darstellung
( auch auf einem PC ):