Меню

Ошибка 205 переполнение плавающей запятой

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.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка 2087 active directory не может разрешить dns
  • Ошибка 204940 log iniis lost