Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Ошибка 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 и "показывает" строчку с
c:=sqr(arctan(abs(sqr(a))) - sqr(b)) + exp(1/3*abs(f-3*b))/exp(3*ln(Cos(x)));

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

Автор: 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.


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