Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2006
Avatar de bosterito
bosterito bosterito is offline
Miembro
 
Registrado: nov 2006
Ubicación: Tucumán, Argentina
Posts: 39
Poder: 0
bosterito Va por buen camino
Cool Tangente

¿Porque cuando pongo tan(Pi/2) me devuelve -3.6893.........., siendo que en realidad se debería producir una indeterminación?. Tengo muchos problemas con la funcion tangente (tan);
Responder Con Cita
  #2  
Antiguo 19-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
La función tan utiliza la instrucción FPTAN para calcular la tangente. La tangente de pi/2 no es una indeterminación, es igual a infinito, y eso es precisamente lo que te esta devolviendo, el número mas alto que puede.

Aquí tienes explicada la instrucción FPTAN
http://www.website.masmforum.com/tut...ap10.htm#fptan
Responder Con Cita
  #3  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y por qué Assert(IsInfinity(Pi/2)) falla?

// Saludos
Responder Con Cita
  #4  
Antiguo 19-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
¿Y por qué Assert(IsInfinity(Pi/2)) falla?

// Saludos
Hola roman, supongo que la pregunta es para mi. También supongo que con IsIninity te refieres a IsInfinite, y que donde dices pi/2, te refieres a tan(pi/2). Si no es así corrígeme.

De todas formas, yo lo que dije es que te daba el numero mas alto que podía, no dije que fuese "infinito". Y además tengo mis dudas de que la función IsInfinite funcione en este caso, ya que su parámetro esta definido como un double mientras que el resultado de "tan" es un extended. Puede que este ultimo punto sea una tontería, tendría que comprobarlo mejor ...

De todas formas lo que es innegable es que la tan(pi/2)=x/0 y que x/0, por lo menos cuando yo estudiaba matemáticas, es igual a infinito, no una indeterminación
Responder Con Cita
  #5  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ja, ja, ¡cuántos errores en una sola línea!

La pregunta era más que nada para saber del funcionamiento de la unidad Math. Se supone que funciones como IsInfinite y la constante INFINITE están para tratar estos casos, o al menos eso creía yo.

// Saludos
Responder Con Cita
  #6  
Antiguo 19-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por roman
La pregunta era más que nada para saber del funcionamiento de la unidad Math. Se supone que funciones como IsInfinite y la constante INFINITE están para tratar estos casos, o al menos eso creía yo.
Yo supongo que también, pero la limitación nos viene impuesta en este caso por la unidad de punto flotante, que al parecer para esta función el valor mayor que puede dar como resultado es ese. Sus razones tendrán.

De todas formas, para el caso nos viene dando igual. En la mayoría de los cálculos un valor MUY alto en lugar de infinito servirá, y si tenemos mucho interés en detectar cuando realmente es infinito. Un par de If convenientemente colocados y listo
Responder Con Cita
  #7  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por seoane
Un par de If convenientemente colocados y listo
Claro, algo como

Código Delphi [-]
if IsInfinite(X) then
  ...



// Saludos
Responder Con Cita
  #8  
Antiguo 19-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pues ya ves, estaba pensando en hacer la gracia de poner esto:

Código Delphi [-]
var
  X: Extended;
  tanX: Extended;
  EsInfinito: Boolean;
begin
  X:= pi/2;
  EsInfinito:= (Sin(X)/Cos(X)) = Infinite;
  tanX:= tan(X);
  if EsInfinito then
    ShowMessage('El Resultado es infinito: ' + FloatToStr(Sin(X)/Cos(X)))
  else
    ShowMessage(FloatToStr(tanX));
end;

Pero, imagínate, el resultado de Sin(pi/2)/Cos(pi/2) es -3,68934881474191E19 . Bueno parece que ya tenemos un nuevo valor para definir el infinito
Responder Con Cita
  #9  
Antiguo 19-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
No es mas sencillo verificar los valores antes de hacer el cálculo?? Ahi podria determinarse si el resultado sera Infinito o si será una indeterminación (0/0, cero sobre cero) y ya. Después de todo esos resultados son conocidos sin necesidad de hacer el cálculo. Es como si se quisiera dividir entre cero, para que esperarse a que brinque el error...
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #10  
Antiguo 19-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por AzidRain
No es mas sencillo verificar los valores antes de hacer el cálculo?? Ahi podria determinarse si el resultado sera Infinito o si será una indeterminación (0/0, cero sobre cero) y ya. Después de todo esos resultados son conocidos sin necesidad de hacer el cálculo. Es como si se quisiera dividir entre cero, para que esperarse a que brinque el error...
AzidRain, con eso me refería cuando dije lo de usar un par de If. El ultimo código intentaba ser una broma. Pero ya veo que no era tan evidente
Responder Con Cita
  #11  
Antiguo 20-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Glup! GluP! y requete Glup!
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
no sé como sacar la tangente de una variable elbilla Varios 2 22-07-2004 16:59:24


La franja horaria es GMT +2. Ahora son las 12:40:38.


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