Ветвящийся выч. процесс, в чем ошибка? |
1. Заголовок темы должен быть информативным. В противном случае тема закрывается и удаляется ...
2. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
3. Одна тема - один вопрос (задача)
4. Спрашивайте и отвечайте четко и по существу!!!
Ветвящийся выч. процесс, в чем ошибка? |
Евгений |
24.11.2010 18:27
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Доброго всем времени суток!
Дано задание составить программу вычисления значения функции: Вот что я наваял: program vetv; Возможно в задании опечатка, так как я думаю, что второе условие не будет выполняться ни при каких значениях. Но меня больше интересует почему при значении В=0.5555, программа выдает 0, ведь в первом условии стоит знак меньше или равно? Извините, что возможно не понятно написал, программист из меня никакой, только первые попытки.. Пользуйся подсветкой кода (выделяешь весь код, и потом в комбобоксе CODE выбираешь нужный язык) Сообщение отредактировано: Lapp - 29.11.2010 8:27 |
volvo |
24.11.2010 18:50
Сообщение
#2
|
Гость |
Цитата почему при значении В=0.5555, программа выдает 0, ведь в первом условии стоит знак меньше или равно? Потому что результаты "точного" сравнения вещественных чисел (то есть, по знаку "=", а не по больше/меньше) зависят от очень многих параметров. Первое - это наличие и подключение сопроцессора. Если он есть и в настройках компилятора подключен, то программаvar r: real; напечатает "less". Если его отключить - то уже не напечатает (здесь имеется в виду Турбо Паскаль). Использование сопроцессорных типов (Single, Double или Extended) меняет дело - с ними сопроцессор работает более точно, поэтому в большинстве случаев сравнение будет правильным. Все дело - в погрешности представления вещественных чисел. Гугла спроси по этой теме, он знает, даст много ссылок. Поэтому вещественные числа вообще не сравниваются через "=" ни в каком виде (надежнее так, по крайней мере). Только с какой-то погрешностью: if abs(r - 0.5555) < eps then ..., где eps может быть очень маленькой константой (скажем, одной миллионной, или одной десятимиллионной), но все-же не нулем. |
Евгений |
24.11.2010 19:32
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Спасибо большое за помощь, подключил в опциях 8087/80287, поставил тип данных Extended. Все заработало!
На счет подсветки кодов учту. Сообщение отредактировано: Евгений - 24.11.2010 19:35 |
Текстовая версия | 25.09.2024 2:40 |