Wir wissen genausowenig wie der Kompiler, welche Werte FCost zu Laufzeit annehmen kann.
Sollte FCost mal 0 sein, dann kommt hier
(Int32(1) shl FCost) - 1;
-1 heraus und das ist außerhalb des zulässigen Bereiches für rounds als UInt32.
[edit]
Misst, jetzt kann ich nichtmal mehr 1 -1 ausrechnen, erinnert mich an
Positive Zahlen in negative umwandeln