2013-03-13 70 views
0

我正在寻找在扩展帕斯卡定义为**指数运算。我一直在寻找一段时间,似乎无法找到它。帕斯卡**定义(指数)

i.e 2**3 = 8 
+0

你说的定义是什么意思?这就是所谓的指数运算,可能使用平方和乘法方法或其一些变体来实现。 – Thomas 2013-03-13 04:09:45

+0

大多数Pascal实现为Exp,Ln和Power提供标准函数。例如:http://www.freepascal.org/docs-html/rtl/math/power.html – paulsm4 2013-03-13 04:09:53

+0

我一直在寻找Pascal如何实现它 – thesentyclimate413 2013-03-13 04:12:22

回答

3

在FreePascal的它在数学单元中实现:

operator ** (bas,expo : float) e: float; inline; 
    begin 
    e:=power(bas,expo); 
    end; 


operator ** (bas,expo : int64) i: int64; inline; 
    begin 
    i:=round(intpower(bas,expo)); 
    end; 

function power(base,exponent : float) : float; 

    begin 
    if Exponent=0.0 then 
     result:=1.0 
    else if (base=0.0) and (exponent>0.0) then 
     result:=0.0 
    else if (abs(exponent)<=maxint) and (frac(exponent)=0.0) then 
     result:=intpower(base,trunc(exponent)) 
    else if base>0.0 then 
     result:=exp(exponent * ln (base)) 
    else 
     InvalidArgument; 
    end; 

function intpower(base : float;const exponent : Integer) : float; 

    var 
    i : longint; 

    begin 
    if (base = 0.0) and (exponent = 0) then 
     result:=1 
    else 
     begin 
     i:=abs(exponent); 
     intpower:=1.0; 
     while i>0 do 
      begin 
       while (i and 1)=0 do 
       begin 
        i:=i shr 1; 
        base:=sqr(base); 
       end; 
       i:=i-1; 
       intpower:=intpower*base; 
      end; 
     if exponent<0 then 
      intpower:=1.0/intpower; 
     end; 
    end;