![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
looogle |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброго времени суток!
При написании программы возникла непонятная проблема.
Начальные значения:
Результаты: ![]() На картинке видно, что почему-то при верном равенстве на результат выводит fasle. В чём проблема? Заранее спасибо. |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата В чём проблема? В погрешности представления вещественных чисел. Нельзя сравнивать вещественное число ни с другим вещественным (ни тем более с целым) оператором "=", можно только смотреть, насколько одно отличается от другого, и если модуль разности не превышает какого-то граничного значения - то считать числа равными.Цитата На картинке видно, что почему-то при верном равенстве На картинке - это результат вывода. Вывод происходит с округлением. Посмотри в отладчике, чему равны значения r/b перед выполнением WriteLn, тогда продолжим разговор. |
looogle |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Результаты деления в данном случае равны:
4,02 / 0,004 = 1005 8,10 / 0,004 = 2010 Посчитал вручную. Всё должно получатся, по-моему. Однако, при выводе frac(r/b); получаю бесконечную десятичную дробь, соответственно 0.999999999999886 и 0.999999999999773 ![]() |
IUnknown |
![]()
Сообщение
#4
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Турбо-Паскаль, при отключенном сопроцессоре (режим {$N-}):
2.0100000000E+00 - 502.50000000000 = 503 - FALSE |
looogle |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хммм.. Странно. В Pascal ABC по другому. И отключённый сопроцессор не помогает. Попробую Free Pascal.
Возможно ещё как нибудь проверить целочисленность чисел? ![]() |
IUnknown |
![]()
Сообщение
#6
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
FPC выдает те же результаты, что приведены в первом посте, отключить сопроцессор там нельзя.
|
looogle |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
А как на счёт другого случая? Как ещё можно проверить целое ли число?
|
IUnknown |
![]()
Сообщение
#8
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Uses Math;(FPC) Сообщение отредактировано: IUnknown - 5.01.2012 18:51 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 3:13 |