PDA

Просмотр полной версии : Сравнение REAL (или LONGREAL)



ВладОвен
13.11.2024, 11:08
Привет.
Подскажите, как будут сравниваться переменные типа REAL (или LONGREAL)?
Сравнение происходит до какого-то знака?
Там ведь "шумы в хвосте"! Получается, что такое сравнение почти всегда будет FALSE?


IF rN = rM THEN
;
ENDIF

melky
13.11.2024, 11:10
проверяйте на больше/меньше сравнивать на равенство real это утопия.

Сергей0308
13.11.2024, 12:16
У меня проблем не возникает:

80018

imaex
13.11.2024, 12:26
Надо смотреть на абсолютное значение разницы между переменными.

melky
13.11.2024, 13:13
Сергей0308 а вы не ручками, а добавьте сюда преобразование от датчика какого-нибудь...

ВладОвен
13.11.2024, 13:13
Использовал функцию OSCAT_BASIC.DIFFER, а максимальное отличие вычисляю в процентах.

80019

capzap
13.11.2024, 13:33
Использовал функцию OSCAT_BASIC.DIFFER, а максимальное отличие вычисляю в процентах.
можете написать и свою функцию, она умещается в одну строчку abs(a-b) <= max( rel_tol * max(abs(a), abs(b)), abs_tol )
https://peps.python.org/pep-0485/

Валенок
15.11.2024, 13:34
Привет.
Подскажите, как будут сравниваться переменные типа REAL (или LONGREAL)?
Сравнение происходит до какого-то знака?
Там ведь "шумы в хвосте"! Получается, что такое сравнение почти всегда будет FALSE?


IF rN = rM THEN
;
ENDIF

Если сравнивать сравнимое то и проблем с "шумами хвоста" не будет

IF rN = LREAL_TO_REAL(rM) THEN //есть тип, должно быть и приведение
;
ENDIF
это неявный минимальный дифф