Контроль переполнения переменных
Контроль переполнения переменных
Здравствуйте! у меня закралась мысль, что в каких-то режимах работы моего ПО (есессно на контроллере DVP) происходит переполнение чисел DWORD или FLOAT. математики в программах очень много и режимы меняются на ходу и очень быстро. отследить глазами это никак не могу.
Отсюда вопрос: есть ли в контроллерах DELTA маркер контроля переполнения переменных. я где-то видел в инструкциях такой маркер, но я не помню, в дельтовской ли.
Отсюда вопрос: есть ли в контроллерах DELTA маркер контроля переполнения переменных. я где-то видел в инструкциях такой маркер, но я не помню, в дельтовской ли.
Re: Контроль переполнения переменных
Есть флаги заёма и переноса M1021, M1022, но учтите - они не защелкиваются, т.е. за ними надо будет следить всякий раз после операции, могущей вызвать перенос. Для матричных операций и сдвигов флаги другие - M1095 и M1096.
__________________________
Помощь - понятие растяжимое, всяк трактует его в меру своего эгоизма...
Помощь - понятие растяжимое, всяк трактует его в меру своего эгоизма...
Re: Контроль переполнения переменных
спасибо! я для начала просто поставлю их и любую их реакцию буду фиксировать! если увижу, что они хоть раз зацепились, то буду очень внимательно свою математику проверять, поскольку я не совсем уверен, что дело в переполнении, может где что-то неправильно считается.
Re: Контроль переполнения переменных
Обычно я при отладке добавляю вспомогательные меркеры, которые активирую вручную. Это позволяет проконтролировать промежуточные результаты.
Re: Контроль переполнения переменных
Для контроля программных ошибок, в.т.ч. деления на 0, есть маркеры M1067, M1068 и регистры D1067, D1068
Re: Контроль переполнения переменных
Переполнение FLOAT?
Может не учли кол-во значащих цифр в FLOAT и пытаетесь сложить и т.п. большое число с очень мелким?
100000,0 + 0,001=??
Может не учли кол-во значащих цифр в FLOAT и пытаетесь сложить и т.п. большое число с очень мелким?
100000,0 + 0,001=??
Re: Контроль переполнения переменных
Нет. У меня может произойти умножение большого числа на ещё большее. При расчетах при позиционировании. Но я во первых нигде не могу найти диапазон числа в формате float. Так ещё и не всегда могу знать какое число в данный момент будет в переменной.
Re: Контроль переполнения переменных
Binary Floating Point: ±1.1755 × 10^-38 ~ ±3.4028 × 10^+38bayk писал(а): Но я во первых нигде не могу найти диапазон числа в формате float.
Decimal Floating Point: ±1175 × 10^-41 ~ ±3402×10^+35
Re: Контроль переполнения переменных
Проблема не в диапазоне, а в кол-ве значащих цифр, примерно 7 с копейками.
Про тонкости работы с float в инете дофига статей.
ну я на это и намекаю.Нет. У меня может произойти умножение большого числа на ещё большее.
Про тонкости работы с float в инете дофига статей.
Re: Контроль переполнения переменных
Я эти цифры видел (со степенями) но в дельте всего 2слова ( регистра) в которых хранится float. В итоге если это dint то там 2 миллиарда с копейками диапазон, а во флот ещё дробная часть есть. Так ещё и 3 символа. Во я и не знаю, что у дельты с допустимыми диапазонами.