Форум «Всё о Паскале» _ Задачи _ Ошибка 205.Как исправить?
Автор: Ericsson 16.02.2010 2:32
Здравствуйте!
Было задание: - вычислить с = 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 и "показывает" строчку с
Вот наглядный так сказать пример... ;) В чем моя ошибка?
Автор: volvo 16.02.2010 3:14
Цитата
В чем моя ошибка?
Емкости типа 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
Цитата(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))) ?
Автор: Ericsson 22.02.2010 0:30
Посидел минут 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.