Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   division por cero (https://www.clubdelphi.com/foros/showthread.php?t=17041)

kalimero 21-12-2004 10:40:34

division por cero
 
Hola a todos.

¿Alguien sabe porque en delphi7 al intentar realizar una division por cero
no salta la excepción?

Saludos

marcoszorrilla 21-12-2004 14:29:13

Pues acabo de hacer una prueba y la excepción salta.
Código Delphi [-]
  procedure TForm1.Button1Click(Sender: TObject);
  var
  a,b,c:Double;
  begin
  a:=7;
  b:=0;
  c:=a/b;
  ShowMessage(FormatFloat(',0.00',c));
  end;
Un Saludo.

Nose 21-12-2004 14:47:45

Quizas tienes deshabilitado alguna opción del debugger

kalimero 21-12-2004 14:52:06

Hola a todos.
Intentarlo sin asignar el valor 0 a una variable (x/0) y vereis
Saludos

roman 21-12-2004 15:01:29

Cita:

Empezado por kalimero
Intentarlo sin asignar el valor 0 a una variable (x/0) y vereis

Este código genera una excepción

Código Delphi [-]
var
  X: Double;

begin
  X := 1;
  Caption := FloatToStr(X/0);
end;

¿Y si en lugar de jugar a las adivinanzas nos pones el código que estás usando?

// Saludos

kalimero 21-12-2004 15:12:40

Hola
No se trata de ninguna adivinanza.
Este codigo no genera una excepcion
Código Delphi [-]
begin

  Caption := FloatToStr(1/0);

end;

Saludos a todos

roman 21-12-2004 15:50:29

Cita:

Empezado por kalimero
Caption := FloatToStr(1/0);

¿Te has fijado en lo que aparece en el caption?

El compilador interpreta 1/0 como la constante INFINITY. INFINITY y NAN (not a number) son valores especiales que define la FPU del procesador.

Según parece, Delphi siempre va a generar una excepción cuando este tipo de valores ocurran, a menos, claro, que el compilador mismo detecte que es una de ellas.

En X/0 no puede determinarlo pues dependiendo del valor de X se obtiene INFINITY o NAN.

Pero esto tiene que ver con la forma en que el FPU trata este tipo de valores. Si pones

Código Delphi [-]
var
  X: Double;

begin
  { de la unidad Math                               }
  {                                                 }
  { de acuerdo a la ayuda de Delphi, esto hace que  }
  { la FPU no genere una excepción y en su lugar    }
  { produzca INFINITY                               }
  SetExceptionMask([exZeroDivide]);

  X := 1;
  Caption := FloatToStr(X/0);
end;

verás que ya no salta la excepción y aparece 'INF' en el caption.

// Saludos

kalimero 21-12-2004 16:24:28

Hola.
Si, ya he visto lo que ponia en el caption.
La pregunta venia al caso porque en otras versiones de delphi no recuerdo que el compilador realizara este tipo de tratamiento sobre los valores INFINITY ó NAN.

Saludos a todos


La franja horaria es GMT +2. Ahora son las 04:26:34.

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