Ver Mensaje Individual
  #1  
Antiguo 19-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
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.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita