RosettaCodeData/Task/Exponentiation-operator/Seed7/exponentiation-operator-2.seed7

33 lines
725 B
Text
Raw Permalink Normal View History

2013-04-10 22:43:41 -07:00
const func float: fltIPow (in var float: base, in var integer: exponent) is func
result
2015-02-20 00:35:01 -05:00
var float: power is 1.0;
2013-04-10 22:43:41 -07:00
local
2015-02-20 00:35:01 -05:00
var integer: stop is 0;
2013-04-10 22:43:41 -07:00
begin
if base = 0.0 then
if exponent < 0 then
2015-02-20 00:35:01 -05:00
power := Infinity;
elsif exponent > 0 then
power := 0.0;
2013-04-10 22:43:41 -07:00
end if;
else
if exponent < 0 then
2015-02-20 00:35:01 -05:00
stop := -1;
2013-04-10 22:43:41 -07:00
end if;
2015-02-20 00:35:01 -05:00
if odd(exponent) then
power := base;
end if;
exponent >>:= 1;
while exponent <> stop do
base *:= base;
2013-04-10 22:43:41 -07:00
if odd(exponent) then
2015-02-20 00:35:01 -05:00
power *:= base;
2013-04-10 22:43:41 -07:00
end if;
exponent >>:= 1;
2015-02-20 00:35:01 -05:00
end while;
if stop = -1 then
power := 1.0 / power;
2013-04-10 22:43:41 -07:00
end if;
end if;
end func;