Сравнение REAL
Clarion, Clarion 7
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Сравнение REAL
Чудеса в решете. Стоп показывает, что значение переменной = 2.3, но при сравнении вылетает. Т.е. VarReal$ < 2.3
VarReal$ = 2.3
DO SetRtn
SetRtn ROUTINE
stop(VarReal$)
if VarReal$ < 2.3 then exit.
...
VarReal$ = 2.3
DO SetRtn
SetRtn ROUTINE
stop(VarReal$)
if VarReal$ < 2.3 then exit.
...
PavelNK
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Сравнение REAL
А покажи в STOP так FORMAT(varReal$,@N10.5) !?
Какой то бред по похожей теме был...
Какой то бред по похожей теме был...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
Сравнение REAL
Real надо сравнивать на разницу значения меньше некой дельты. Ну скажем (VarReal$ - 2.3) < 0.00005
seawolf
Дед Пахом
Сравнение REAL
В обще случае следует конечно избегать сравнения real, но если идут скажем идут геодезические вычисления (тригонометрия), то приходиться делать это!
seawolf
Дед Пахом
seawolf
Сравнение REAL
Всем спасибо! Чтобы не заморачиваться воспользовался советом seawolf
seawolf писал(а):Real надо сравнивать на разницу значения меньше некой дельты. Ну скажем (VarReal$ - 2.3) < 0.00005
PavelNK
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Сравнение REAL
Да я тупой. Все равно не понимаю.
Риторический вопрос: Если это не результат от деления то какого хрена?
Риторический вопрос: Если это не результат от деления то какого хрена?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
Сравнение REAL
Поскольку в компьютерах используется двоичная форма представления данных, число 2.3 будет выражено в виде периодической двоичной дроби, строго говоря, бесконечной длины. 8-байтное плавающее на x86 даёт возможность 52 двоичных (15-16 десятичных) знака. Таким образом, число может слегка отличаться от правильного значения, начиная с 15 знака.
Я запустил интерпретатор Python (там такие же плавающие) и вычислил
>> print(2.3 - 2)
>>0.299999999999999998
>>(2.3-2) == 0.3
>>false
>> print(2.3-2-0.3)
>> -1.6653345369377348e-16
По-моему, всё ясно
Я запустил интерпретатор Python (там такие же плавающие) и вычислил
>> print(2.3 - 2)
>>0.299999999999999998
>>(2.3-2) == 0.3
>>false
>> print(2.3-2-0.3)
>> -1.6653345369377348e-16
По-моему, всё ясно
Yufil
Сравнение REAL
Кстати...
Конечно, Abs(VarReal$-2.3) ...Real надо сравнивать на разницу значения меньше некой дельты. Ну скажем (VarReal$ - 2.3) < 0.00005
Yufil
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Сравнение REAL
Сообщение Алексей- Софт-Центр »
Добрый день!
Ну, да. Плавающая точка никогда не хранила и не хранит целых значений.
Кстати: про это надо помнить, когда у Вас объявлено поле real в базе.
И вдруг вылетает лихое сообщение, типа:
"Запись была изменена другой станцией"
хотя никто больше с базой не работает.
Алексей
Ну, да. Плавающая точка никогда не хранила и не хранит целых значений.
Кстати: про это надо помнить, когда у Вас объявлено поле real в базе.
И вдруг вылетает лихое сообщение, типа:
"Запись была изменена другой станцией"
хотя никто больше с базой не работает.
Алексей
Алексей- Софт-Центр
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Сравнение REAL
Т.е. четко 2.30000000 записать в REAL нет возможности?
Понятно. Запомним.
Понятно. Запомним.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
-
- ✯ Ветеран ✯
- Сообщения: 5174
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Сравнение REAL
Замените VarReal$ на LOC:VarReal и будет Вам счастье. И старайтесь не использовать Implicit Variables.
We are hard at work… for you. 

kreator
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 5301
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 12 раз
- Поблагодарили: 65 раз
Сравнение REAL
При сравнении real надо использовать round. То есть типа round(VarReal$ - 2.3,0.000001)=0. И все будет пучком 

C6/C12, ШВС, tps/btrieve.
finsoftrz
Вернуться в «CLARION for Windows»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)