Переполнение плавающей запятой паскаль как исправить

Ошибка 205 Floating point overflow Turbo Pascal Решение и ответ на вопрос 190128

Relrin

0 / 0 / 1

Регистрация: 21.10.2010

Сообщений: 32

1

12.11.2010, 18:37. Показов 4291. Ответов 3

Метки нет (Все метки)


Разбираюсь дальше с Паскалем… Сейчас возникла очередная проблемка с ним, т.к. при подсчетах паскаль прерывает работу из-за ошибки #205 Floating point overflow. Хотя помойму все правильно в решении задачи, но не понимаю из-за чего проблемы… Ошибка 205 обозначает проблему с переполнением операции с плавающей точкой.

Сопсна условие задачи расположено внизу поста…
Задачу решаю через итерационный цикл (а по другому-то и не нельзя )

Мое решение:

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
Var
  m,i:integer;
  y,x,xprev,p,pprev,Sum,Eps,two: double;
  
Begin
  xprev:=1;
  pprev:=2;
  two:=2;
  writeln('Введите количество элементов суммы: ');
  readln(m);
  writeln('Введите точность вычислений: ');
  readln(Eps);
  //Подсчет функции с заданной точностью
  repeat  
    i:=0;
    sum:=0;
    //подсчет суммы элементов
    while i<=m do
    begin
      x:=0.5*(xprev+pprev);
      p:=xprev*pprev;
      two:=two*2;     
      sum:=sum+two*(sqr(x)-sqr(p));
      xprev:=x;
      pprev:=p;
      i:=i+1;
    end;     
    //функция равна...
    y:=1-0.5*sum;    
  until Abs(sqr(x)-sqr(p))<=Eps;
  writeln('Значение y: ');
  writeln(y);
  readln;
End.

Миниатюры

Ошибка 205 Floating point overflow
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Puporev

Почетный модератор

64272 / 47571 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2010, 19:19

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1. Зачем количество слагаемых? Мы не можем его задавать, оно меняется в зависимости от задаваемой точности.
2. Неверно условие завершения цикла. Последовательность возрастающая, естественно условие как и написано в задании

Pascal
1
until Abs(sqr(x)-sqr(p))>Eps;

вот я бы так написал.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var x,p,xi,pi,t,e,s,y:real;
begin
clrscr;
write('e=');
readln(e);
x:=1;
p:=2;
t:=1;
s:=-3;
repeat
xi:=0.5*(x+p);
pi:=x*p;
t:=t*2;
s:=s+t*(xi*xi-pi*pi);
x:=xi;
p:=pi;
until abs(xi*xi-pi*pi)>e;
y:=1-0.5*s;
write('y=',y:0:4);
readln
end.



1



Relrin

0 / 0 / 1

Регистрация: 21.10.2010

Сообщений: 32

12.11.2010, 19:38

 [ТС]

3

Цитата
Сообщение от Puporev
Посмотреть сообщение

Pascal
1
2
3
4
5
6
7
uses crt;
var x,p,xi,pi,t,e,s,y:real;
begin
....
s:=-3;
....
end.

Подскажи пожалуйста… А почему мы до подсчетов, сумму приняли за -3?



0



Почетный модератор

64272 / 47571 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2010, 20:05

4

Потому что при i=0 x=1 p=2
S(0)=2^0*(1*1-2*2)=-3



0



Relrin

0 / 0 / 1

Регистрация: 21.10.2010

Сообщений: 32

1

12.11.2010, 18:37. Показов 4256. Ответов 3

Метки нет (Все метки)


Разбираюсь дальше с Паскалем… Сейчас возникла очередная проблемка с ним, т.к. при подсчетах паскаль прерывает работу из-за ошибки #205 Floating point overflow. Хотя помойму все правильно в решении задачи, но не понимаю из-за чего проблемы… Ошибка 205 обозначает проблему с переполнением операции с плавающей точкой.

Сопсна условие задачи расположено внизу поста…
Задачу решаю через итерационный цикл (а по другому-то и не нельзя )

Мое решение:

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
Var
  m,i:integer;
  y,x,xprev,p,pprev,Sum,Eps,two: double;
  
Begin
  xprev:=1;
  pprev:=2;
  two:=2;
  writeln('Введите количество элементов суммы: ');
  readln(m);
  writeln('Введите точность вычислений: ');
  readln(Eps);
  //Подсчет функции с заданной точностью
  repeat  
    i:=0;
    sum:=0;
    //подсчет суммы элементов
    while i<=m do
    begin
      x:=0.5*(xprev+pprev);
      p:=xprev*pprev;
      two:=two*2;     
      sum:=sum+two*(sqr(x)-sqr(p));
      xprev:=x;
      pprev:=p;
      i:=i+1;
    end;     
    //функция равна...
    y:=1-0.5*sum;    
  until Abs(sqr(x)-sqr(p))<=Eps;
  writeln('Значение y: ');
  writeln(y);
  readln;
End.

Миниатюры

Ошибка 205 Floating point overflow
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Puporev

Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2010, 19:19

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1. Зачем количество слагаемых? Мы не можем его задавать, оно меняется в зависимости от задаваемой точности.
2. Неверно условие завершения цикла. Последовательность возрастающая, естественно условие как и написано в задании

Pascal
1
until Abs(sqr(x)-sqr(p))>Eps;

вот я бы так написал.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses crt;
var x,p,xi,pi,t,e,s,y:real;
begin
clrscr;
write('e=');
readln(e);
x:=1;
p:=2;
t:=1;
s:=-3;
repeat
xi:=0.5*(x+p);
pi:=x*p;
t:=t*2;
s:=s+t*(xi*xi-pi*pi);
x:=xi;
p:=pi;
until abs(xi*xi-pi*pi)>e;
y:=1-0.5*s;
write('y=',y:0:4);
readln
end.

1

Relrin

0 / 0 / 1

Регистрация: 21.10.2010

Сообщений: 32

12.11.2010, 19:38

 [ТС]

3

Цитата
Сообщение от Puporev
Посмотреть сообщение

Pascal
1
2
3
4
5
6
7
uses crt;
var x,p,xi,pi,t,e,s,y:real;
begin
....
s:=-3;
....
end.

Подскажи пожалуйста… А почему мы до подсчетов, сумму приняли за -3?

0

Почетный модератор

64270 / 47569 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

12.11.2010, 20:05

4

Потому что при i=0 x=1 p=2
S(0)=2^0*(1*1-2*2)=-3

0

83

Приложение

ПЕРЕЧЕНЬ ОШИБОК

В ходе своей работы программист неизбежно сталкивается с ошибками. Обнаружение ошибок компиляции сопровождается выдачей краткого комментария, позволяющего довольно быстро понять причину и исправить синтаксическую ошибку. В отличие от них, ошибочные операции в процессе выполнения программы обычно вызывают сообщение, содержащее числовой код ошибки и адрес ячейки памяти. Для того, чтобы облегчить работу с ошибками выполнения, необходимо знать описание их кодов.

Сообщения об ошибках во время компиляции

Error 1:Out of memory – Ошибка 1: Выход за границы основной памяти.

Error 2: Identifier expected – Ошибка 2: Нужен идентификатор.

Error 3: Unknown identifier – Ошибка 3: Неизвестный идентификатор. Этот идентификатор не объявлен.

Error 4: Duplicate identifier – Ошибка 4: Повторный идентификатор. Error 5: Syntax error – Ошибка 5: Синтаксическая ошибка.

Error 6: Error in real constant – Ошибка 6: Ошибка в действительной константе.

Error 7: Error in integer constant – Ошибка 7: Ошибка в целой константе.

Error 8: String constant exceeds line – Ошибка 8: Строковая константа превы-

шает размеры строки. Вероятно, забыли поставить апостроф в конце строки,

Error 10: Unexpected end of file – Ошибка 10: Неожиданный конец файла про-

граммы или модуля. Возможно:

исходный текст закончился до последнего end;

не закончили комментарий.

Error 11: Line too long – Ошибка 11: Строка слишком длинная. Допустимая длина – 126 символов.

Error 12: Type identifier expected – Ошибка 12: Нужен идентификатор типа. Error 14: Invalid file name – Ошибка 14: Неверное имя файла.

Error 15: File not found – Ошибка 15: Файл не найден. Error 16: Disk full – Ошибка 16: Диск заполнен.

Error 17: Invalid compiler directive – Ошибка 17: Ошибочна директива компи-

лятора.

Error 20: Variable identifier expected – Ошибка 20: Нужен идентификатор пе-

ременной.

Error 21: Error in type – Ошибка 21: Ошибка в определении типа.

Error 22: Structure too large – Ошибка 22: Слишком большая структура (массив, запись). Допустима структура длиною 65520 байт.

Error 23: Set base type out of range – Ошибка 23: Базовый тип множества нарушает границы. Количество элементов множества может быть до 255.

84

Error 24: File components may not be files or objects – Ошибка 24: Компонен-

тами файла не могут быть файлы или объекты.

Error 25: Invalid string length – Ошибка 25: Ошибочна длина строки. Допускается 255 символов.

Error 26: Type mismatch – Ошибка 26: Несовместимость типов. Например:

переменной слева от знака присваивания и результата выражения в операторе присваивания;

фактического и формального параметров;

выражения , определяющего индекс;

операндов в выражении.

Error 29: Ordinal type expected – Ошибка 29: Нужен порядковый тип. Error 30: Integer constant expected – Ошибка 30: Нужна целая константа. Error 31: Constant expected – Ошибка 31: Нужна константа.

Error 34: Invalid function result type – Ошибка 34: Ошибочен тип результата функции.

Error 36: Begin expected – Ошибка 36: Нужен Begin Error 37: END expected – Ошибка 37: Нужен END.

Error 42: Error in expression – Ошибка 42: Ошибка в выражении. Error 43: Illegal assignment – Ошибка 43: Неверное присваивание

Error 44: Field identifier expected – Ошибка 44: Hужeн идeнтификaтop пoля зaписи.

Error 50: DO expected – Ошибка 50: Нужен оператор DO Error 54: OF expected – Ошибка 54: Нужен оператор OF

Error 57: THEN expected – Ошибка 57: Нужен оператор THEN

Error 58: TO or DOWNTO expected – Ошибка 58: Нужен оператор TO или DOWNTO

Error 59:Undefined forward – Ошибка 59: Heoпpeдeлeннoe опережающее опи-

сание.

Error 60: Too many procedures – Ошибка 60: Слишком много процедур и (или) функций. Допускается не более 512 в одной программе или модуле.

Error 62: Division by zero – Ошибка 62: Деление на нуль.

Error 63: 1nvalid file type – Ошибка 63: Ошибочен файловый тип.

Error 64: Cannot read or write variables of this type – Ошибка 64: He допускает-

ся чтение или запись переменных данного типа:

процедуры Read и Readln могут считывать переменные символьного, целого, действительного и строкового типа;

процедуры Write и Writeln могут выводить переменные символьного,

целого, действительного, булевского и строкового типа.

Error 66: String variable expected – Ошибка 66: Hужнa cтpoкoвaя пepeмeннaя. Error 67: String expression expected – Ошибка 67: Нужно выражение, строко-

вого типа.

Error 69: Unit name mismatch – Ошибка 69: Ошибочное имя программного модуля.

85

Error 71: Internal stack overflow – Ошибка 71: Внутреннее переполнение стека.

Error 74: Constant and case tуpes do not match – Ошибка 74: Tипы констант и тип выражения оператора CASE не соответствуют друг другу.

Error 75: Record or obiect vaгiable expected – Ошибка 75: Hужнa переменная типа запись или объект.

Error 76: Constant out of range – Ошибка 76: Константа нарушает допустимые границы.

Error 77: File variable expected – Ошибка 77: Hужнa файловая переменная. Error 79: Integer or real expression expected – Ошибка 79: Hужнo выражение типа real или Integer.

Error 85: «;» expected – Ошибка 85: Нужна «;». Error 86: «:» expected – Ошибка 86: Нужна «:». Error 87: «(» expected – Ошибка 87: Нужна «(«. Error 88: «)» expected – Ошибка 88: Нужна «)».

Error 89: «=» expected – Ошибка 89: Нужна «=». Error 90: «=» expected – Ошибка 90: Нужна «:=». Error 91: «:=» expected – Ошибка 91: Нужна «:=». Error 92: «[» expected – Ошибка 92: Нужна «[«.

Error 93: «]» expected – Ошибка 93: Нужна «]». Error 94: «.» expected – Ошибка 94: Нужна «.». Error 95: «..» expected – Ошибка 95: Нужна «..».

Error 96: Too many variables – Ошибка 96: Слишком много переменных; ОП для них более 64 Кбайт.

Error 97: Invalid FOR control variable – Ошибка 97: Ошибочен тип переменной параметра цикла оператора FOR.

Error 98: 1nteger variable expected – Ошибка 98: Hужнa переменная целого типа.

Error 99: Files and procedure types are not allowed here – Ошибка 99: Здесь не допускаются файлы и процедуры.

Error 100: String length mismatch – Ошибка 100: Ошибочна длина строковой константы.

Error 101: Invalid ordering of fields – Ошибка 101: Неверный порядок полей в константе типа запись.

Error 102: String constant expected – Ошибка 102: Нужна константа строково-

го типа.

Error 108: Overflow in arithmetic operation – Ошибка 108: Переполнение при выполнении арифметических операций.

Error 111: User break – Ошибка 111: Компиляция прервана с помощью кла-

виш Ctrl + Break.

Error 112: CASE constant out of range – Ошибка 112: кoнcтaнтa CASE

нapушaeт дoпуcтимыe гpaницы. Целочисленные константы оператора Case должны быть в диапазоне от -32768 до 32767.

86

Error 113: Error in statement – Ошибка 113: Ошибка в операторе. Возможно:

нелогичное расположение оператора или служебного слова;

перед else была поставлена точка с запятой.

Error 122: Invalid variable reference – Ошибка 122: Ошибочна ссылка на пе-

ременную.

Error 123: Too manу sуmbols – Ошибка 123: Cлишкoм мнoгo cимвoлoв в пpoгpaммe (нужнa OП бoлee 64Kбaйт).

Error 124: Statement part too large – Ошибка 124: Слишком большой раздел операторов (более 24 Кбайт).

Error 126: Files must be var parameters – Ошибка 126: Файлы должны быть параметрами — переменными.

Error 131: Header does not match previous definition – Ошибка 131: Заголовок процедуры или функции не соответствует предыдущему определению.

Error 132: Disk erгor – Ошибка 132: Kpитичecкaя ошибка диска: он в состоянии «не готов».

Error 133: Cannot evaluate this expгession – Ошибка 133: Heльзя вычиcлить дaннoe выражение.

Error 137: Structured variables are not allowed here – Ошибка 137: Здесь не до-

пускается использование структурной переменной (записи, массива).

Error 140: Invalid floating point operation – Ошибка 140: Недопустимая опера-

ция с плавающий :запятой.

Error 143: Invalid procedure or function reference – Ошибка 143: Недопустимая ссылка на процедуру или функцию.

Error 146: File access denied – Ошибка 146: Нужно назначение файла.

Сообщения об ошибках вовремя выполнения программы

Ошибки, ввода — вывода

Эти ошибки контролировать с помощью директивы компилятора I и функции

IOresult.

Ошибки ввода — вывода системные

Error 2: File not found – Ошибка 2: Фaйл нe нaйдeн. Error 3: Path not found – Ошибка 3: Маршрут не найден.

Error 5: File access denied – Ошибка 5: Heвoзмoжeн дocтуп к фaйлу. Error 15: Invalid drive nomber – Ошибка 15: Ошибoчeн нoмep диcкoвoдa

Error 16: Cannot remove current directory – Ошибка 16: Нельзя удалить теку-

щий каталог.

Error 17: Cannot rename across drives – Ошибка 17: Нельзя при переименова-

ний указывать разные дисководы.

Ошибки ввода — вывода программные

Error 100: Disk read error – Ошибка 100: Oшибкa чтeния диска: попытка чтения по концу файла.

87

Error 101: Disk write error – Ошибка 101: Ошибка записи на диск, на диске не хватает памяти.

Error 102: File not assigned – Ошибка 102: Файлу не определено имя физического файла с помощью оператора assign.

Error 103: File not open – Ошибка 103: Файл не открыт.

Error 104: File not Open for input – Ошибка 104: Файл не открыт для ввода. Error 105: File not Open for output – Ошибка 105: Файл не открыт для вывода. Error 106: Invalid numeric format – Ошибка 106: Oшибoчнo apифмeтичecкoe

знaчение для ввoдa.

Критические ошибки ввода — вывода

Error 150: Disk is write — protected – Ошибка 150: Диск защищен от записи. Error 151: Bad drive request struct length – Ошибка 151: Неисправно устрой-

ство.

Error 152: Drive not readу – Ошибка 152: Уcтpойство не готово.

Фатальные ошибки

Эти ошибки всегда приводят к немедленной остановке программы.

Error 200: Division by zero – Ошибка 200: Деление на нуль.

Error 201: Range check error – Ошибка 201: Ошибка, при проверке границ (интервальных переменных).

Error 202: Stack overflow error – Ошибка 202: Переполнение стека.

Error 205: Floating point Overflow – Ошибка 205: Переполнение при операций с плавающей запятой.

Error 207: Invalid floating point operation – Ошибка 207: Недопустимая опера-

ция с плавающей запятой: при преобразовании значения в целое или ошибка в аргументах SQRT или LN.

Error 215: Arithmetic overflow error – Ошибка 215: Ошибка переполнения при выполнении арифметических операций.

88

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1.Н.Б.Культин. Программирование в Turbo Pascal 7.0 и Delphi. 2-е изд., перераб. и доп. / Н.Б.Культин. – Спб.: БХВ – Санкт-Петербург, 1999. – 416 с.

2.Н.Б.Культин. Turbo Pascal в задачах и примерах / Н.Б.Культин. – Спб.: БХВ – Санкт-Петербург, 2001. – 256 с.

3.С.А.Немнюгин. Turbo Pascal. Программирование на языке высокого уровня. Учебник для вузов. / С.А.Немнюгин. – СПб.: Питер, 2003. – 544 с.

4.С.А.Немнюгин. Turbo Pascal: практикум. / С.А.Немнюгин. – СПб.: Питер, 2001. – 256 с.

5.В.Б.Попов. Turbo Pascal для школьников. 3-е изд., перераб. и доп. / В.Б.Попов. – М.: Финансы и статистика, 2006. – 528 с.

6.А.В.Могилев, Н.И.Пак, Е.К.Хеннер. Информатика. 3-е издание, переработанное и дополненное. / А.В.Могилев, Н.И.Пак, Е.К.Хеннер. – М.: Академия, 2004. – 848 с.

7.А.В.Могилев, Н.И.Пак, Е.К.Хеннер. Практикум по информатике. / А.В.Могилев, Н.И.Пак, Е.К.Хеннер. – М.: Академия, 2001. – 608 с.

8.Г.Г.Рапаков, С.Ю.Ржеуцкая. Turbo Pascal для студентов и школьников. / Г.Г.Рапаков, С.Ю.Ржеуцкая. – Спб.: БХВ – Петербург, 2005. – 352 с.

9.С.В.Симонович. Информатика. Базовый курс. 2-е издание. / С.В. Симонович. – СПб.: Питер, 2006. – 640 с.

ОГЛАВЛЕНИЕ

ОБЩИЕ СВЕДЕНИЯ…………………………………………………………….3 Лабораторная работа № 1 ЛИНЕЙНЫЕ АЛГОРИТМЫ. ОПЕРАТОРЫ ВВОДА/ВЫВОДА ДАННЫХ.………….………………………………………..5 Лабораторная работа № 2 МАТЕМАТИЧЕСКИЕ ВЫРАЖЕНИЯ…………..12 Лабораторная работа № 3 РАЗВЕТВЛЯЮЩИЕСЯ АЛГОРИТМЫ…………19

Лабораторная работа № 4 ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ………………….28 Лабораторная работа № 5 ОДНОМЕРНЫЕ МАССИВЫ….………………….36 Лабораторная работа № 6 ДВУМЕРНЫЕ МАССИВЫ………………………..40 Лабораторная работа № 7 СТРОКИ……………………………………………50

Лабораторная работа № 8 ПОДПРОГРАММЫ ПРОЦЕДУРЫ………………57 Лабораторная работа № 9 ПОДПРОГРАММЫ ФУНКЦИИ…………………64 Лабораторная работа № 10 РАБОТА С ФАЙЛАМИ……………………….…72 Приложение ПЕРЕЧЕНЬ ОШИБОК ………………………………………..83 БИБЛИОГРАФИЧЕСКИЙ СПИСОК……..………………………………… 88

Соседние файлы в папке Учебный материал

  • #
  • #

    01.06.20151.52 Mб9Lekcija_1.ppsx

  • #

    01.06.2015620.89 Кб8Lekcija_10.ppsx

  • #

    01.06.20151.27 Mб8Lekcija_2.ppsx

  • #

    01.06.2015755.54 Кб8Lekcija_3.ppsx

  • #

    01.06.2015955.11 Кб8Lekcija_4.ppsx

IPB

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas][/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Ошибка 205.Как исправить?, Error 205: Floating Point overflow

сообщение 16.02.2010 2:32

Сообщение
#1


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Здравствуйте!

Было задание:
— вычислить с = arctg2|b2— a2| + 3 √|f-3b| / Cos3x (под корнем только числитель),
если даны:
a = 3.5
x = ln|b-a| + 2*a
f = x*eb
b = 3 + Cosa2

Составил программу —

program OS;
var a,b,x,f,c:real;
begin
writeln ('BBoD a');
readln (a);
b:= 3 + Cos(sqr(a));
x:=ln(abs(a-b)) + 2*a;
f:=x*exp(b) + 2.5*a;
c:=sqr(arctan(abs(sqr(b))) - sqr(a)) + exp(1/3*abs(f-3*b))/exp(3*ln(Cos(x)));
writeln ('c:=');
readln;
end.

Собственно при запуске — после ввода числа «а» (3.5) — пишет Error 205: Floating point overflow и «показывает» строчку с

c:=sqr(arctan(abs(sqr(a))) - sqr(b)) + exp(1/3*abs(f-3*b))/exp(3*ln(Cos(x)));

Вот наглядный так сказать пример… ;)
Прикрепленное изображение
В чем моя ошибка?

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

volvo

сообщение 16.02.2010 3:14

Сообщение
#2

Гость


Цитата

В чем моя ошибка?

Емкости типа Real не хватает для того, чтобы вместить полученный результат.

Переменная типа Real может принимать значение от 2.9*10-39 до 1.7*1038. При работе вышеприведенной программы получается результат 1.60033850960527*1046. Переходи на сопроцессорные типы double или extended… Любой из них способен вместить результат… Single тоже не хватит.

Добавлено через 9 мин.

P.S. У тебя не совсем корректно записана формула:

Цитата

sqr(arctan(abs(sqr(a))) — sqr(b))

вычислит (arctan(|a2|) — b2)2, а не то что тебе нужно. Еще одно: Откуда при вычислении f взялось второе слагаемое? В условии его не было.

 К началу страницы 

+ Ответить 

Ericsson

сообщение 16.02.2010 19:48

Сообщение
#3


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Цитата(volvo @ 15.02.2010 23:14) *

Еще одно: Откуда при вычислении f взялось второе слагаемое? В условии его не было.

Пардон,не дописал ->
f = x*eb + 2.5 * a

Цитата(volvo @ 15.02.2010 23:14) *

P.S. У тебя не совсем корректно записана формула: sqr(arctan(abs(sqr(a))) — sqr(b))
вычислит (arctan(|a2|) — b2)2, а не то что тебе нужно.

Хм.
sqr(arctan(abs(sqr(a))) — abs(sqr(b))) ?

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

Ericsson

сообщение 22.02.2010 0:30

Сообщение
#4


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Николай

Репутация: -  0  +


Посидел минут 40 над кодом,но зато отыскал все свои ошибки:

program OS;
var a,b,x,f,c:real;
begin
writeln ('BBoD a');
readln (a);
b:= 3 + Cos(sqr(a));
x:=ln(abs(a-b)) + 2*a;
f:=x*exp(b) + 2.5*a;
c:=sqr(arctan(abs(sqr(b) - sqr(a)))) + exp(1/3*ln(abs(f-3*b)))/exp(3*ln(Cos(x)));
writeln ('c:=',c:6:2);
readln;
end.

Тему можно закрыть.

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)

Пользователей: 0

500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают

Связь с администрацией: bu_gen в домене octagram.name

Регистрация   Войти‘;

Авторизация

Логин:

Пароль:

Запомнить меня на этом копьютере

Регистрация
Забыли свой пароль?

Справочник |Библиотека |Файлы и загрузки |Уроки |FAQ| Скачать Turbo Pascal Форум

  • Синтаксис языка
  • Типы данных
  • Стандартные модули
  • Процедуры и функции
  • Зарезервированные слова
  • Директивы компилятора
  • Сообщения об ошибках
    • Ошибки выполнения
    • Ошибки компиляции
  • Примеры программ
  • Описание среды разработки

Главная / Справочник / Сообщения об ошибках / Ошибки выполнения

Переполнение операции с плавающей точкой.

Описание

Операция с плавающей точкой вернула слишком большое число для Turbo Pascal (или для сопроцессора, если он есть).

© 2009–2023 Russian Pascal Developer Network.
Техническая площадка: ISBIZ Хостинг

ISBIZ.agency
продвижение сайта

The Problem

The issue is that your variable fat1 is getting too big and overflowing. With free pascal, your code causes a 205 error (Floating point overflow). This is similar to a 207 Invalid floating point operation — free pascal run-time error codes. The real types that are relevant to your code have the following constraints (from the free pascal data types wiki page):

Type       Range                   Significant digits   Bytes
Real       platform dependent      ???                  4 or 8
Single     1.5E-45 .. 3.4E38       7-8                  4
Double     5.0E-324 .. 1.7E308     15-16                8
Extended   1.9E-4932 .. 1.1E4932   19-20                10

The Work Around

You simply need to account for the possibility of overflow with your largest variable. It is not possible to simply check if the variable is above it’s max value so you should do the reverse of the operation that could cause the overflow. I also used Extended to have a better estimate.

var max_fat : Extended = 1.1 * power(10,4932);
var should_step : Extended= max_fat / (cont1) / (cont1-1) / (cont1-2) / (cont1-3);

then in your while loop include the check:

fat1 < should_step

The result of this reverse operation is the maximum that the variable fat1 can be before it overflows. I use the Math library to help calculate the maximum Extended. The following test code works for me:

program cosseno;

Uses Math;

var fat1, fat2, n1, n2, cont1, cont2, s, max_fat, should_step : Extended;
   begin
      s := 0.5;
      fat1 := 24;
      fat2 := 720;
      n1 := 1/fat1;
      n2 := 1/fat2;
      cont1 := 8;
      cont2 := 10;

      max_fat := 1.1 * power(10,4932);

      should_step := max_fat;

      while ((n1 - n2) > 0.000001) AND (fat1 < should_step) do
       begin
          should_step := max_fat / (cont1) / (cont1-1) / (cont1-2) / (cont1-3);

          fat1 := (cont1) * (cont1-1) * (cont1-2) * (cont1-3) * fat1;
          fat2 := (cont2) * (cont2-1) * (cont2-2) * (cont2-3) * fat2;
          cont1 := cont1 + 4;
          cont2 := cont2 + 4;
          n1 := n1 + 1/fat1;
          n2 := n2 + 1/fat2;
          writeln('fat1  > ', fat1);
          writeln('fat2  > ', fat2);
          writeln('cont1 > ', cont1);
          writeln('cont2 > ', cont2);
          writeln('n1    > ', n1);
          writeln('n2    > ', n2);
       end;

      s := s + n1 - n2;
      writeln('<==================>');
      writeln(s);
   end.

The code yields the following result:

5.40302305868139717414E-0001

which I checked to be correct for at least the first 10 digits.

{$A+} Включить/выключить выравнивание
по словам

{$B+} Включить/выключить полное вычисление
булевых выражений

{$С MOVEABLEDEMANDLOADDISCARDABLE}

Управление сегментом кода (только режимы
Windows и Protected):

MOVEABLE Система может изменить положение
сегмента кода в памяти

FIXED Система не может изменить
положение сегмента кода в памяти

PRELOAD Сегмента кода загружается с
началом исполнения программы

DEMANDLOAD Сегмент кода загружается
только при обращении

PERMANENT Сегмент кода остается в памяти
после загрузки

DISCARDABLE Сегмент кода может быть выгружен
после обращения

{$D+} Включить/выключить отладочную
информацию

{$E+} Включить/выключить эмуляцию
сопроцессора вещественных чисел

{$F+} Включить/выключить FAR-вызовы по
умолчанию

{$G Имя_модуля1, Имя_модуля2 …}

Включить в проект указанные модули
Unit (только режимы Windows и Protected)

{$G+} Включить/выключить генерацию
кода процессора 80286

{$I Имя_файла} Включить исходный текст
файла *.pas в программу

{$I+} Включить/выключить контроль
операций ввода-вывода

{$K+} Включить/выключить оптимизацию
вызовов подпрограмм (только Windows)

{$L Имя_файла} Включить файл *.obj в программу
на этапе сборки

{$L+} Включить/выключить
генерациюMAP-файла

{$M Стек, Хип-минимум, Хип-максимум}

Указать размеры стека (1024-65520) и хипа
(0-655360) для программы в байтах

{$N+} Включить/выключить поддержку
сопроцессора 80×87

{$O+} Включить/выключить поддержку
оверлеев

{$O Имя_модуля} Подключить оверлейный
модуль (unit)

{$P+} Если включена, строки «открыты»
(«закрыть» для совместимости со
старыми версиями)

{$Q+} Включить/выключить контроль
переполнения

{$R+} Включить/выключить контроль
переполнения

{$R Имя_файла} Подключить файл ресурсов
*.res (только Windows и Protected)

{$S Размер} Указать размер сегмента кода
(только Windows и Protected)

{$S+} Включить/выключить проверку
переполнения стека

{$T+} Включить/выключить контроль типов
указателей

{$V+} Включить/выключить строгий контроль
длины строк

{$W+} Если включен, генерируются начальный
и завершающий код для far-функций и
процедур

{$X+} Разрешить вызывать функции как
процедуры

{$Y+} Если включена, к модулю добавляется
таблица перекрестных ссылок

Приложение 3. Основные сообщения об ошибках Паскаля

Сообщения компилятора о синтаксических
ошибках:

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 — нужен BEGIN

37 — нужен END

38 — нужно выражение типа Integer

39 — нужно выражение перечисляемого типа

40 — нужно выражение типа Boolean

41 — типы операндов не соответствуют
оператору

42 — ошибка в выражении

43 — неверное присваивание

44 — нужен идентификатор поля

45 — объектный файл слишком большой
(больше 64 Кбайт)

46 — неопределенная внешняя процедура

47 — неправильная запись объектного
файла

48 — сегмент кода слишком большой (больше
65520 байт)

49 — сегмент данный слишком велик

50 — нужен оператор DO

51 — неверное определение PUBLIC

52 — неправильное определение EXTRN

53 — слишком много определений типа EXTRN
(больше 256)

54 — требуется OF

55 — требуется интерфейсная секция

56 — недействительная перемещаемая
ссылка

57 — требуется THEN

58 — требуется TO или DOWNTO

59 — неопределенное опережающее описание

60 — слишком много процедур (больше 512 в
одном модуле)

61 — неверное преобразование типа

62 — деление на нуль

63 — неверный файловый тип

64 – невозможно прочитать или записать
переменные данного типа

65 – требуется использование
переменной-указателя

66 — нужна строковая переменная

67 — нужно выражение строкового типа

68 — программный модуль не найден

69 — несоответствие времен программных
модулей

70 — несоответствие версий программных
модулей

71 — повторное имя программного модуля

72 — ошибка формата файла программного
модуля

73 — требуется секция реализации

74 — типы констант и тип выражения
оператора case не соответствуют друг
другу

75 — нужна переменная типа запись

76 — константа нарушает границы

77 — нужна файловая переменная

78 — нужно выражение типа указатель

79 — нужно выражение типа real или integer

80 — метка не находится внутри текущего
блока

81 — метка уже определена

82 — неопределенная метка в предыдущем
разделе операторов

83 — недействительный аргумент оператора
@

84 — нужно ключевое слово UNIT

85 — нужно указать «;»

86 — нужно указать «:»

87 — нужно указать «,»

88 — нужно указать «(«

89 — нужно указать «)»

90 — нужно указать «=»

91 — нужно указать «:=»

92 — нужно «[» или «(.»

93 — нужно «]» или «.)»

94 — нужно «.»

95 — нужно «..»

96 — слишком много переменных

97 — неправильная переменная цикла
оператора FOR

98 — нужна переменная целого типа

99 — здесь не допускаются файлы

100 — несоответствие длины строковой
переменной или константы

101 — неверный порядок полей

102 — нужна константа строкового типа

103 — нужна переменная типа integer или real

104 — нужна переменная перечисляемого
типа

105 — ошибка в операторе INLINE

106 — предшествующее выражение должно
иметь символьный тип

107 — слишком много перемещаемых элементов

108 — недостаточно памяти для выполнения
программы

109 — нет возможности найти файл .EXE

110 — модуль выполнять нельзя

111 — компиляция прервана с помощью клавиш
Ctrl+Break

112 — константа оператора CASE находится
вне границ

113 — ошибка в операторе

114 — нет возможности вызвать процедуру
прерывания

115 — для компиляции необходимо наличие
сопроцессора 8087

116 — для компиляции необходим режим 8087

117 — адрес назначения не найден

118 — в такой ситуации включаемые файлы
не допускаются

119 — ошибка формата файла .TPU

120 — нужен NIL

121 — неверный квалификатор переменной

122 — недействительная ссылка на переменную

123 — слишком много символов (больше 64
Кбайт)

124 — слишком большой раздел операторов
(больше 24 Кбайт)

125 — в модуле нет отладочной информации

126 — файлы должны иметь параметры VAR

127 — слишком много условных символов

128 — пропущена условная директива

129 — пропущена директива ENDIF

130 — ошибка в начальных условных
определениях

131 — заголовок не соответствует предыдущему
определению

132 — критическая ошибка диска

133 — нельзя вычислить данное выражение

134 — некорректное завершение выражения

135 — неверный спецификатор формата

136 — недопустимая косвенная ссылка

137 — здесь не допускается использование
структурной переменной

138 — нельзя вычислить без блока System

139 — доступ к данному символу отсутствует

140 — недопустимая операция с плавающей
запятой

141 — нельзя выполнить компиляцию оверлеев
в память

142 — должна использоваться переменная-процедура
или функция

143 — недопустимая ссылка на процедуру
или функцию

144 — этот модуль не может использоваться
в качестве оверлейного

Сообщения об ошибках времени исполнения
программы:

1 — не найден файл

3 — не найден путь

4 — слишком много открытых файлов

5 — отказано в доступе к файлу

6 — недоступный файловый канал

12 — недействительный код доступа к
файлам

15 — недопустимый номер дисководов

16 — нельзя удалить текущий каталог

17 — нельзя при именовании указывать
разные дисководы

100 — ошибка чтения диска

101 — ошибка записи на диск

102 — файлу не присвоено имя

103 — файл не открыт

104 — файл не открыт для ввода

105 — файл не открыт для вывода

106 — неверный числовой формат

150 — диск защищен от записи

151 — неизвестный модуль

152 — дисковод находится в состоянии «не
готов»

153 — неопознанная команда

154 — в исходных данных

155 — при запросе к диску неверная длина
структуры

156 — ошибка при операции установки
головок на диске

157 — неизвестный тип носителя

158 — сектор не найден

159 — кончилась бумага на устройстве
печати

160 — ошибка при записи на устройство

161 — ошибка при чтении с устройства

162 — сбой аппаратуры

200 — деление на нуль

201 — ошибка при проверке границ

202 — переполнение стека

203 — переполнение динамически распределяемой
области памяти

204 — недействительная операция ссылки

205 — переполнение операции с плавающей
запятой

206 — исчезновение порядка при операции
плавающей запятой

207 — недопустимая операция с плавающей
запятой

208 — не установлена подсистема управления
оверлеями

209 — ошибка чтения оверлейного файла

Like this post? Please share to your friends:
  • Переполнение гросс итогов на меркурий 185ф ошибка 162 как исправить
  • Переплата отпускных как исправить проводки
  • Перепишите фрагмент биографии лескова исправляя фактические ошибки
  • Перепишите предложения устранив лексические ошибки это вековые проблемы легко их не решить
  • Перепишите предложение исправив орфографические ошибки подписка открывает доступ ко всем заданиям