Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Lazarus

Войти
Регистрация
Восстановить пароль
 
nitsko
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 3
#1

Ошибка External: SIGFPE - Lazarus

23.12.2016, 13:47. Просмотров 381. Ответов 4

Помогите пожалуйста исправить ошибку.

Нужно было сделать программу, которая бы решала многочлен методом barstow (деление на многочлен), но при вычислении dr (39 строка) программа выдает ошибку External: SIGFPE.
Как я узнала, это означает, что в числе слишком много знаков, но как это исправить?

Вот сам код программы:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure TForm1.Button1Click(Sender: TObject);
var
n,i:integer;
Es,r,s,D,k:real;
dr,ds:extended;
a:array[0..10] of real;
b:array[0..10] of real;
c:array[0..10] of real; 
begin
n:=strtoint(edit1.text);
for i:=0 to n do
a[i]:=strtofloat(stringgrid1.cells[1,i+1]);
Es:=strtofloat(edit2.text);
r:=strtofloat(edit3.text);
s:=strtofloat(edit4.text);
repeat
for i:=0 to n do begin
 b[7]:=a[7];
 b[6]:=a[6]+r*a[6];
 b[5]:=a[5]+r*b[6]+s*a[7];
 b[4]:=a[4]+r*b[5]+s*b[6];
 b[3]:=a[3]+r*b[4]+s*b[5];
 b[2]:=a[2]+r*b[3]+s*b[4];
 b[1]:=a[1]+r*b[2]+s*b[3];
 b[0]:=a[0]+s*b[2];        
 
c[7]:=b[7];
 c[6]:=b[6]+r*b[6];
 c[5]:=b[5]+r*b[6]+s*b[7];
 c[4]:=b[4]+r*b[5]+s*b[6];
 c[3]:=b[3]+r*c[4]+s*b[5];
 c[2]:=b[2]+r*c[3]+s*c[4];
 c[1]:=b[1]+r*c[2]+s*c[3];
 c[0]:=b[0]+s*c[2];
 end;
 
k:=c[2]*c[2]-c[1]*c[3];
 if k<>0 then begin
 dr:=(-1*b[1]*c[2]+b[0]*c[3])/k;
 ds:=(-b[0]*c[2]+b[1]*c[3])/k;
 end;
r:=r+dr;
s:=s+ds;
until ((abs(ds/s)<Es) and (abs(dr/r)<Es));
//Roots of calculation
D:=r*r-4*(-s);
if D>0 then
begin
  edit5.text:=floattostr(((-r-sqrt(D))/2));
  edit6.text:=floattostr(((-r+sqrt(D))/2));
end;
if D=0 then
begin
  edit5.text:=floattostr(-(-r/2));
  edit6.text:='-' ;
end;
if D<0 then
begin
  edit5.text:='-';
  edit6.text:='-';
 
end;
 end;
end.
0
Вложения
Тип файла: 7z project.2.7z (3.29 Мб, 2 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2016, 13:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка External: SIGFPE (Lazarus):

Ошибка: External SIGFPE - Lazarus
Нужно вычислить функцию. Изображение приложил. Если ввести &quot;0&quot;, появляется ошибка &quot;External SIGFPE&quot;, не смотря на исключения. При вводе...

Ошибка External Sigfpe - Lazarus
Ребят, помогите отыскать причину ошибки. Выскакивает в Unit 1 на строке 70 (на вычислении разности). Пробовал все, что нашел на просторах...

Выскакивает ошибка external sigfpe. Пожалуйста - Lazarus
Выбивает ошибку &quot;Проект project1 вызвал класс исключения 'External SIGFPE'. По адресу 1000055F3. Вот что пишется в этом адрессе:...

Ошибка: project1 вызвал класс исключения 'external: SIGFPE' - Lazarus
достала эта ошибка не одна програ не идет! procedure TForm1.Button1Click(Sender: TObject); var a,b,c,d:integer; x1,x2:real; ...

вызвал класс исключения 'external: SIGFPE' - Lazarus
Помогите! В чём ошибка, вызвал класс исключения 'external: SIGFPE' unit Unit1; {$mode objfpc}{$H+} interface uses ...

Интерполяция кубическим сплайном. ошибка - класс исключения SIGFPE - Lazarus
не могу понять в чём дело, вроде бы деления на ноль или переполнения каких-либо переменных нет. спасите, пожалуйста, уже целую неделю не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23552 / 15546 / 4594
Регистрация: 22.10.2011
Сообщений: 27,572
Записей в блоге: 5
23.12.2016, 14:30 #2
nitsko, ответ для приведенных данных какой ожидается? X1 и X2 чему должны быть равны?
0
nitsko
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 3
23.12.2016, 14:43  [ТС] #3
ожидается значение около 0,2519, но тут больше интересует исправление.. технической, а не проблемы в вычислениях
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23552 / 15546 / 4594
Регистрация: 22.10.2011
Сообщений: 27,572
Записей в блоге: 5
23.12.2016, 14:55 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Значит, я неправильно исправил... Проблема - в том, что у тебя
Pascal
1
until ((abs(ds/s)<Es) and (abs(dr/r)<Es));
не выполняется никогда, ds/s не становится меньше Es по модулю, то же самое касается и dr/r, оба эти значения стремятся к 1.33333..., поставь точку останова на указанной строке и посмотри, что будет после прохода нескольких шагов:

Ошибка External: SIGFPE

Вот еще дальше:

Ошибка External: SIGFPE

Соответственно, значения всех переменных в это время растут, и в конце концов происходит переполнение. Проверяй алгоритм, что-то делаешь не так.
1
nitsko
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 3
23.12.2016, 15:11  [ТС] #5
О, спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2016, 15:11
Привет! Вот еще темы с ответами:

Ненавистная ошибка External:SIGSEGV - Lazarus
Программа банальна. Два элемента Memo, создается матрица, выводится в Memo1, потом идет обработка матрицы(добавляется столбец в Memo1, где...

SaveDialog и ошибка External: SIGSEGV - Lazarus
Здравствуйте. Столкнулся с непонятным поведением в Lazarus, а именно рандомным появлением исключения External: SIGSEGV при вызове диалога...

Ошибка: raised exception class 'External: SIGSEGV' - Lazarus
Мой код проходит компиляцию, но при запуске .exe после того, как нажимаю на кнопку, мной созданную и обработанную, выходит такое сообщение:...

Ошибка: Проект вызвал класс исключения External:SIGSEGV - Lazarus
Привет! Работаю над приложением для работы с оценками учеников. Решил начать с раздела настроек. При вводе кол-ва оценок учащихся проект...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.12.2016, 15:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru