Hier ein Vorschlag, der mit einer Toleranz für den log10 arbeitet. Die Funktionen schauen nach, ob x nahe bei einer Zehnerpotenz liegt. Wenn nein, werden die nächst niedrigeren bzw. höheren Potenzen genommen. Die Nähe-Toleranz tol sollte sinnvollerweise nicht kleiner als ca 1e-15 gewählt werden.
Delphi-Quellcode:
{---------------------------------------------------------------------------}
function minpower10(x: extended): integer;
{-Berechnet für x>0 den maximalen Integerwert mit 10^result <= x}
const
tol = 1e-9;
var
lx: extended;
li: integer;
begin
lx := log10(x);
li := round(lx);
if abs(li - lx) > tol then li := floor(lx);
minpower10 := li;
end;
{---------------------------------------------------------------------------}
function maxpower10(x: extended): integer;
{-Berechnet für x>0 den minimalen Integerwert mit 10^result >= x}
const
tol = 1e-9;
var
lx: extended;
li: integer;
begin
lx := log10(x);
li := round(lx);
if abs(li - lx) > tol then li := ceil(lx);
maxpower10 := li;
end;