PDA

Ver la Versión Completa : Invalid Floating Point Operation


inetplus
18-05-2004, 20:22:10
Como se puede determinar la causa de este tipo de errore ?

Existe alguna variable que puedan darle a uno un indicio del causante del problema.

un saludo

roman
18-05-2004, 20:26:45
Yo creo que esás atacando el problema desde un ángulo equivocado. Dicho así es muy ambiguo; mejor platícanos qué código es el que te genera dicho error.

// Saludos

sanxpue
18-05-2004, 20:51:48
¡¡¡Que
Ese error no lo marca cuando divides entre cero

Conocidisimo el error de punto flotante :eek:

inetplus
18-05-2004, 21:49:36
Ojala pudiese darte mas información en donde se produce el error, voy a darte una explicación un tanto mas certera, el sistema funciona en forma perfecta en una PC Pentium IV y un K6 de 500. No ocurre lo mismo en otro K6 de las mismas caracteristicas de este ultimo pero con menos memoria.

El error se produce al iniciar su ejecución.

roman
18-05-2004, 22:05:03
No sé si tenga que ver pero había algunos pentium que tenían un error. Existe una directiva al compilador para esto: {U+}.

// Saludos

MiguelR
17-03-2012, 05:58:22
a mi me marca ese problema con este código, soy nuevo y no se mucho, agradecería mucho la ayuda
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
m:array[1..10,1..10] of extended;
v:array[1..10] of extended;
a,i,j,x,z:integer;
k,b:extended;
linea:string;
archivo:textfile;
begin
a:=strtoint(edit2.text);
assignfile(archivo,edit1.text);
reset(archivo);
for i:=1 to a do
for j:=1 to a do
read(archivo,m[i,j]);

z:=1;
x:=1;
b:=1;
k:=0;
while i<>a do begin
for i:=z to (z+1) do begin
k:=m[i,j];
b:=b*k;
for j:=x to a do begin
v[j]:=(m[i,j])/(k);
end;
end;
for i:=i+1 to a do begin
k:=m[i,j];
for j:=j to a do begin
if k<>0 then
m[i,j]:=((v[j])/(k))+m[i,j]
else break;
end;
end;

z:=z+1;
x:=x+1;
end;

m[i,j]:=(m[i,j])*b;
memo1.lines.add(floattostr(m[i,j]));
end;

end.

newtron
17-03-2012, 09:56:48
Hola.

Yo creo que en algún momento alguna variable está cogiendo un valor disparatado así que deberías ir depurando el programa paso a paso mirando qué valor cogen las variables para detectar en qué linea de da el error.

Saludos

Casimiro Notevi
17-03-2012, 10:19:36
Bienvenido a clubdelphi, MiguelR, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración.

ecfisa
17-03-2012, 22:11:33
Hola Miguel.

El primer error que veo es que aquí:

begin
a:=strtoint(edit2.text);
...
for i:=1 to a do
for j:=1 to a do
read(archivo,m[i, j]);

Cargas a x a valores en la matriz m. Pero inmediatamente luego de entrar al bucle while y sin asignarle valor a j, haces:

...
while i<>a do
begin
for i:=z to (z+1) do
begin
k:= m[i,j]; // <- ¡ Aquí !
...

Resulta que j, luego de salir del ciclo for, tiene un valor de a+1 y el valor de m[i, (a+1)] es indeterminado ya que nunca se le asigno algo...

Saludos.