|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Замучила ошибка Invalid floating point operation
Здравствуйте! Пишу программу, делающую простые математические вычисления. На строке проверки условия if где берётся модуль числа Abs программа вылетает и выдаёт ошибку Project Project1.exe raised exception class EnvalidOP with message 'Invalid Floating point operation'
Вот весь код Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls; type mas = array of extended; mas2 = array of integer; TForm1 = class(TForm) Button1: TButton; Chart1: TChart; Series1: TLineSeries; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var n,tau,eps,i, kol_org,j:integer; lymb,dt:extended; x:mas; mas_org:mas2; begin n:=20000; dt:=1; lymb:=1.85; tau:=800; eps:=10; kol_org:=0; setlength(x,n+tau); for i:=0 to tau-1 do x[i]:=0.1; for i:=tau-1 to n+tau-2 do x[i+1]:=( dt*(-x[i]+lymb-x[i+1-tau]*x[i+1-tau])+eps*x[i] )/eps; for i:=0 to n+tau-1 do begin if ( (x[i]>0) and (x[i+1]<0) ) or ( (x[i]<0) and (x[i+1]>0) ) then begin kol_org:=kol_org+1; end; end; setlength(mas_org,kol_org); j:=0; for i:=0 to n+tau-1 do begin if (((x[i]>0) and (x[i+1]<0)) or ((x[i]<0) and (x[i+1]>0))) then begin if (Abs(x[i])<Abs(x[i+1])) or (Abs(x[i])=Abs(x[i+1])) then mas_org[j]:=i else mas_org[j]:=i+1; j:=j+1 end; end; Series1.Clear; for i:=0 to n+tau-1 do Series1.AddXY(i,x[i]); end; end. В чём ошибка? Помогите пожалуйста. Что интересно, если закомментировать условие где выдаётся ошибка Код:
if (Abs(x[i])<Abs(x[i+1])) or (Abs(x[i])=Abs(x[i+1])) then mas_org[j]:=i else mas_org[j]:=i+1; то программа всё равно выдаёт ошибку, но только на строке Код:
Series1.AddXY(i,x[i]); |
#2
|
||||
|
||||
возможно x[i] к которому ты обращаешься не существует
|
#3
|
|||
|
|||
Почему не существует? Я его в var создаю (если так можно выразиться). Я даже с ним в двух циклах for работаю. Из-за чего он может исчезнуть (если может)?
Отлаживал - наводил мышкой на массив x[i] - данные есть. |
#4
|
||||
|
||||
Смотрим:
Код:
setlength(x,n+tau); ... for i:=0 to n+tau-1 do begin ... x[i+1] Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
|||
|
|||
Спасибо Вам большое!
Ну какой же я невнимательный... Ну конечно же - он указывает на элемент массива x с номеров 20800, а массив то динамический. То есть этого элемента и не существует. Их там от нуля и до 20799. Ещё раз большое спасибо ALexandr555 и angvelem. |