Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 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
  #2  
Antiguo 20-05-2006
samantha jones samantha jones is offline
Miembro
 
Registrado: ago 2004
Posts: 46
Poder: 0
samantha jones Va por buen camino
Prueba con:

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

Saludos
Espero te sirva
Responder Con Cita
  #3  
Antiguo 20-05-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Thumbs up 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.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usar la libreria crt.dcu de Turbo Pascal 7 en delphi 2205 nunez1984 API de Windows 10 08-03-2010 04:36:34
manual de excepciones de object pascal para free pascal??? Garion OOP 3 27-05-2005 00:42:29
compatibilidad entre Turbo Pascal 7 y Delphi 7 !! Jat Varios 0 13-12-2004 23:24:34
Label de Pascal en Delphi AGAG4 Varios 3 21-09-2004 01:25:55
de Pascal a DELPHI camambrini Varios 2 24-02-2004 18:16:35


La franja horaria es GMT +2. Ahora son las 23:07:37.


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
Copyright 1996-2007 Club Delphi