IPB
ЛогинПароль:

> Компиляция правил для данного раздела

1. Заголовок темы должен быть информативным. В противном случае тема закрывается и удаляется ...
2. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
3. Одна тема - один вопрос (задача)
4. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Ветвящийся выч. процесс, в чем ошибка?
сообщение
Сообщение #1


Новичок
*

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

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


Доброго всем времени суток!
Дано задание составить программу вычисления значения функции:
Прикрепленное изображение
Вот что я наваял:
program vetv;
uses crt;
var
A,B,F: real;
begin
textbackground(white);
clrscr;
textcolor(black);
write('введите A: ');
readln(A);
write('введите B: ');
readln(B);
if (A>0) and (abs(B)<=0.5555)
then F:=exp(ln(A)*0.5555)-0.5555*B
else
if (A>0) and (abs(B)<0.5555)
then F:=sqrt(A)/B-0.5555*B
else
if A<=0
then F:=0.5555*exp(A)*sin(B);
write('F=',F);
readln;
end.

Возможно в задании опечатка, так как я думаю, что второе условие не будет выполняться ни при каких значениях.
Но меня больше интересует почему при значении В=0.5555, программа выдает 0, ведь в первом условии стоит знак меньше или равно?
Извините, что возможно не понятно написал, программист из меня никакой, только первые попытки..

Пользуйся подсветкой кода (выделяешь весь код, и потом в комбобоксе CODE выбираешь нужный язык)

Сообщение отредактировано: Lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
почему при значении В=0.5555, программа выдает 0, ведь в первом условии стоит знак меньше или равно?
Потому что результаты "точного" сравнения вещественных чисел (то есть, по знаку "=", а не по больше/меньше) зависят от очень многих параметров. Первое - это наличие и подключение сопроцессора. Если он есть и в настройках компилятора подключен, то программа
var r: real;
begin
r := 0.5555;
if abs( r ) = 0.5555 then writeln('less');
end.

напечатает "less". Если его отключить - то уже не напечатает (здесь имеется в виду Турбо Паскаль). Использование сопроцессорных типов (Single, Double или Extended) меняет дело - с ними сопроцессор работает более точно, поэтому в большинстве случаев сравнение будет правильным.

Все дело - в погрешности представления вещественных чисел. Гугла спроси по этой теме, он знает, даст много ссылок. Поэтому вещественные числа вообще не сравниваются через "=" ни в каком виде (надежнее так, по крайней мере). Только с какой-то погрешностью:

if abs(r - 0.5555) < eps then ...
, где eps может быть очень маленькой константой (скажем, одной миллионной, или одной десятимиллионной), но все-же не нулем.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Спасибо большое за помощь, подключил в опциях 8087/80287, поставил тип данных Extended. Все заработало!
На счет подсветки кодов учту.

Сообщение отредактировано: Евгений -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.03.2024 13:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name