Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Punción Powe() de Delphi a Pascal (https://www.clubdelphi.com/foros/showthread.php?t=31837)

Delphius 19-05-2006 06:26:40

Punción Powe() de Delphi a Pascal
 
Por locuras de mi profesor de modelos y simulación, debo implementar un pequeño algoritmo que genera variables aletorias según la distribución weibull en pascal (no tiende noción de Delphi). Esa parte anda OK. El problema es que el resultado final es un número elevado a una potencia. Busqué en la ayuda de pascal (Turbo Pascal 7), algo como la función Power() en Delphi, pero no hay nada. Al parecer, Pascal no tiene esa función.
Así que opté por pasar el código de Delphi a Pascal. La función power() es:
Código Delphi [-]
function Power(const Base, Exponent: Extended): Extended;
begin
  if Exponent = 0.0 then
    Result := 1.0               { n**0 = 1 }
  else if (Base = 0.0) and (Exponent > 0.0) then
    Result := 0.0               { 0**n = 0, n > 0 }
  else if (Frac(Exponent) = 0.0) and (Abs(Exponent) <= MaxInt) then
    Result := IntPower(Base, Integer(Trunc(Exponent)))
  else
    Result := Exp(Exponent * Ln(Base))
end;

Esto entiendo.... lo que me cuesta entender es lo que corresponde a IntPower():
unction IntPower(const Base: Extended; const Exponent: Integer): Extended;
Código Delphi [-]
asm
        mov     ecx, eax
        cdq
        fld1                      { Result := 1 }
        xor     eax, edx
        sub     eax, edx          { eax := Abs(Exponent) }
        jz      @@3
        fld     Base
        jmp     @@2
@@1:    fmul    ST, ST            { X := Base * Base }
@@2:    shr     eax,1
        jnc     @@1
        fmul    ST(1),ST          { Result := Result * X }
        jnz     @@1
        fstp    st                { pop X from FPU stack }
        cmp     ecx, 0
        jge     @@3
        fld1
        fdivrp                    { Result := 1 / Result }
@@3:
        fwait
end;
, ya que está en assembler, y eso me marea (y eso que trato de guiarme por los comentarios) ... ya que no manejo eso... lo he mirado un poco... pero no termino de entenderlo. Si alguien me puede ayudar... le estaría muy agradecido. Gracias.

samantha jones 20-05-2006 00:01:55

Prueba con:

Código Delphi [-]
Pow:=Exp(Potencia * Ln(Base))

Saludos
Espero te sirva

Delphius 20-05-2006 06:19:48

Problema resuelto
 
Pues, he resuelto he problema... buscando en google encontré la función de la potencia, en forma recursiva, que lo único que realiza es llamarse a si misma mediante:
Código Delphi [-]
 Potencia := Exp(Exponente * Ln(Base));

samantha jones, se te olvidó decir que era recursiva!;)
Gracias por haberte tomado un tiempo para contestar.


La franja horaria es GMT +2. Ahora son las 04:31:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi