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
else if (Base = 0.0) and (Exponent > 0.0) then
Result := 0.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.