Определение ветки для If

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
Mikhail235
незнакомец
Сообщения: 4
Зарегистрирован: 06.01.2013 17:56:40

Определение ветки для If

Сообщение Mikhail235 »

Простая программа: при x<=-0.6 выбираем одну из веток в операторе If. Проблема заключается в том, что Паскаль не дает точного значения 0.6, а дает 0.59999999998, посему в точке 0.6 значение вычисляется не точно. Знаю, что это как-то обходится, даже когда-то на Си я это использовал, но вот как это сделать на Паскале...?
Подскажите, плз
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

Вариантов несколько.
1) использовать тип "пошире", extended.
2) вместо 0.6 использовать 0.6+eps, где eps -- минимальное число, которое можно прибавить к 0.6 так, что его значение изменится. Подробнее см. в этой теме: viewtopic.php?f=23&t=8717
Mikhail235
незнакомец
Сообщения: 4
Зарегистрирован: 06.01.2013 17:56:40

Сообщение Mikhail235 »

Спасибо. Помогло изменение типа на extended
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Вообще, напишите функцию сравнения дробных чисел, где третьим параметров передавайте точность.
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

stikriz писал(а):напишите функцию сравнения дробных чисел

Зачем? В учебных целях?
Я считаю, такие советы нужно давать обязательно с оговоркой --
"сейчас напиши, но вообще-то, конечно, следует пользоваться стандартной функцией".
Иначе у обучаемого сформируется вредная привычка изобретать велосипед :)
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

Ask писал(а):следует пользоваться стандартной функцией

Позволите поинтересоваться именем стандартной функции, подходящей случаю?
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

CompareValue из модуля math
Ответить