Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Уважаемая техническая поддержка! У меня возникает следующая проблема: при использовании оператора if-then-else с несколькими условиями (типа IF ((N1 >= N2) && (N3 == 0))) по какой-то причине во время компиляции возникает ошибка ("Неверный аргумент операции"). Как выяснилось, компилятору не нравится числовое значение в условии (0). При замене нуля, например на локальную константу с начальным значением 0, программа компилируется без ошибок. Собственно вопрос: как в Техно ST происходит работа с простыми числами (не объявленными) и является ли этот момент уникальным, а если нет, то где еще могут не работать такие приемы?
Сообщения / Posts 78 | Из / From: РФ
| IP / IP: IP адрес / IP address |
SATER
Forum Haunter / Завсегдатай форума
Участник № / Member № 1414
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
SATER, Да, действительно, N3 типа bool. С вашей версией согласен. Значит сравниваемые величины должны быть одинаковых типов данных? Или это справедливо только для типа bool?
Сообщения / Posts 78 | Из / From: РФ
| IP / IP: IP адрес / IP address |
SATER
Forum Haunter / Завсегдатай форума
Участник № / Member № 1414
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Это вопрос к технической поддержке... В любом случае большое спасибо за консультацию!
Сообщения / Posts 78 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Romсheg
unregistered
отправлено / posted
Тип bool - уже состояние результата сравнения, зачем его еще с чем-то сравнивать? Результат выполнения операции сравнения в любом языке - есть результат в формате bool. Если у вас сама переменная этого типа - то сравнивать ее с чем-то смысла фактически нет, поэтому выражение вида: bool b1; if (b1==true) в любом языке программирования будет некорректным. А корректным будет только такое выражение: bool b1; if (b1) а для состояния false: bool b1; if (!b1)
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Romсheg, Вы правы. В данном конкретном случае N3 уже является результатом сравнения, однако в программе мне требуется признак результата этого сравнения, поэтому и предпринимается такая конструкция оператора. Ваши замечания по поводу корректного способа получения требуемого мне результата вполне справедливы (назову их своим недосмотром). Предложенное Вами решение предложил также г-н SATER. Мне интересно требуется ли при сравнении, чтобы типы данных величин были одинаковы или же TM сам преобразует остальные типы данных также как это декларируется в руководстве IDE?
Сообщения / Posts 78 | Из / From: РФ
| IP / IP: IP адрес / IP address |
Romсheg
unregistered
отправлено / posted
Преобразование типа должно учитываться, однако есть некоторые особенности, например при сравнении типа с константой - надо явно указать тип константы. Например: сравнивая переменную типа REAL с константой - желательно константу указать тоже в том же типе. v1 : REAL; if (v1==10) - я так понимаю не совсем корректная формулировка, правильнее будет вот так: if (v1==10.0)
Когда сравнивается две переменные - то, вроде как ТМ6 преобразование типа выполняет сам. Но - особенно надо учитывать правила этих преобразований, а то при вычислениях может привести к потере точности. Например - умножение REAL и INT однозначно даст потерю точности, потому как результат будет целочисленным. Как-то уже сам на подобное натыкался. Но это оговорено в документации.
IP / IP: IP адрес / IP address |
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534
отправлено / posted
Romсheg, Спасибо за ответ! То, что "целочисленность результата арифметических вычислений в программе имеет высший приоритет" действительно оговорено в документации. Похоже на то, что по крайней мере желательно явно указывать тип данных для получения адекватных результатов, а также во избежании ошибок компилятора.
Сообщения / Posts 78 | Из / From: РФ
| IP / IP: IP адрес / IP address |