Nicht gut: Durch Umwandlung von uint64 zu double und zurück zu uint64 verlierst du bei grossen Zahlen an Präzision.
Grund: double ist nur auf ca. 15 Stellen (dezimal) präzis während uint64 Werte 19 stellig sein können.
http://docwiki.embarcadero.com/RADStudio/Tokyo/de/Interne_Datenformate_(Delphi)
Beispiele:
9000000000000000512 wird durch Umwandlung in double und zurück zu uint64 zu
9000000000000000000
9000000000000000513 wird zu 9000000000000001024
Wenn du mit uint64 Genauigkeit rechnen willst, dann verzichte auf double.
Deine uint64 Power Funktion könnte so aussehen:
Delphi-Quellcode:
function Power( exp : integer ) : uint64;
begin
Result := uint64(1) shl (exp*10); // exp in [0..6] check einbauen
end;