2013-03-13 1 views
0

Je cherchais la définition en Pascal étendu pour l'opération d'exponentiation **. Je cherche depuis un moment maintenant et n'arrive pas à le trouver.Pascal ** définition (exponent)

i.e 2**3 = 8 
+0

Que voulez-vous dire par définition? C'est ce qu'on appelle l'exponentiation et elle est probablement mise en œuvre en utilisant l'approche du carré et multiplier ou une variante de cela. – Thomas

+0

La plupart des implémentations Pascal fournissent des fonctions standard pour Exp, Ln et Power. Par exemple: http://www.freepascal.org/docs-html/rtl/math/power.html – paulsm4

+0

Je cherchais comment Pascal l'a implémenté – thesentyclimate413

Répondre

3

En FreePascal il est mis en œuvre dans l'unité de calcul:

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;