PDA

Просмотр полной версии : 210-209 float -> int,.. ИПП 120 [ok event] e.t.c.



sot
16.03.2020, 03:38
Привет всем.

Новичок в программировании в овен лоджик.

Не могу понять как так и норма ли это:

47908

(2,1*100 -> int = 209 =))

Куда писать? кого спрашивать? Подскажете ветку форума, или и тут вопрос для трёпа сойдёт?

И ещё,.. обсуждалось, наверное, для ИПП 120 - при программировании экранов,
ну очень хотелось бы иметь системную переменную "Экран" (типа int) не говоря уже об [Ok-event]

//sot

Ревака Юрий
18.03.2020, 14:33
Привет всем.

Новичок в программировании в овен лоджик.

Не могу понять как так и норма ли это:

47908

(2,1*100 -> int = 209 =))

Куда писать? кого спрашивать? Подскажете ветку форума, или и тут вопрос для трёпа сойдёт?

И ещё,.. обсуждалось, наверное, для ИПП 120 - при программировании экранов,
ну очень хотелось бы иметь системную переменную "Экран" (типа int) не говоря уже об [Ok-event]

//sot

Добрый день. Это особенности округления float, и преобразования блоков, если подать число 2,100001 будет все норм, блоки преобразования не округляют по правилам, они откидывают дробную часть, это нужно учитывать, и использовать округление. Раздел по OwenLogic https://owen.ru/forum/forumdisplay.php?f=34https://owen.ru/forum/forumdisplay.php?f=63 и ПР

sot
19.03.2020, 09:00
Добрый день. Это особенности округления float, и преобразования блоков, если подать число 2,100001 будет все норм, блоки преобразования не округляют по правилам, они откидывают дробную часть, это нужно учитывать, и использовать округление. Раздел по OwenLogic https://owen.ru/forum/forumdisplay.php?f=34https://owen.ru/forum/forumdisplay.php?f=63 и ПР

т.е., не исключён сценарий, когда

1.0 -> bool == false ? (в том случае, если по какой-то причине процессор будет держать число 1.0 в памяти, как 0.9999)

manjey73
19.03.2020, 09:13
Сделайте округление до целого. есть макросы же для этого, потом делайте уже x-> bool
другой вариант это поставить гистерезис, если у вас не только 1-ницей ограничено значение, чтобы не плясало bool значение

sot
19.03.2020, 22:18
т.е. Вы ответили, что, Да, такое - возможно.

Просо странно.
Если исходить из принципов хранения числа в виде мантисса и экспоненциальная часть, то в норме такое было бы не возможно.
И вообще я думал, что если преобразование в BOOL, то считается, что часть памяти в виде исходной переменной содержит хоть один значимый бит, даже (-0)

А будьте добры ещё раз тыкните меня В ветку форума или документации, где можно понять как происходят преобразования среди типов.

(я не имею в виду, что не хочу делать округления, я просто не понимаю логики работы аппаратной части и хочу разобраться)

manjey73
19.03.2020, 22:31
любое значение float ниже 1 в bool даст 0, что еще надо понимать ?

capzap
19.03.2020, 23:09
Просо странно.
Если исходить из принципов хранения числа в виде мантисса и экспоненциальная часть, то в норме такое было бы не возможно.
И вообще я думал, что если преобразование в BOOL, то считается, что часть памяти в виде исходной переменной содержит хоть один значимый бит, даже (-0)

А будьте добры ещё раз тыкните меня В ветку форума или документации, где можно понять как происходят преобразования среди типов.

слышали когда либо про такое https://en.wikipedia.org/wiki/Truncation

sot
22.03.2020, 14:38
слышали когда либо про такое https://en.wikipedia.org/wiki/Truncation

Прткольно )) первый раз слышу, как и о том, что
Если делается функция преобразования, например
x>I

то она работает некоторым странным образом. Обратимся в начало обсуждения
2.1 * 100.0 = 210.0 >toInt = 209

Это реально не напрягает?

Отсюда вылезает и вопрос о том, что при вычислениях с плавающей запятой, иногда, вероятно в момент когда значение достигнет около 0 (нуля) , я получу преобразование float to boolean в виде Как вы сказали (мол, что тут не понятного) равное False

а, что, правда, есть такая логика, мол 0,999999 - это False ?
Где об этом прочитать?

и..ещё, я не подразумеваю, что делаю Trunc когда делаю => toInt - это не нормально.
Нормально это было бы документировать, чего я не нашел.
Дайте ссылку на документацию.

Спасибо.

sot
22.03.2020, 14:42
у меня контрольные суммы не сходятся!

Понимаете.

Я блин. не понимаю - что я делаю не так... суммирую всё переводя в Int. И получаю разногласие в суммировании.
На контроллере одна сумма, на панелька - другая.

и разница не в тысячных долях, а в ЕДЕНИЦАХ.

Это какой-то бред.

sot
22.03.2020, 14:46
любое значение float ниже 1 в bool даст 0, что еще надо понимать ?

эээ.... не понятно. это ошибка.

100.0 / 100.0 > to_bool = false - норма?

capzap
22.03.2020, 15:34
Прткольно )) первый раз слышу, как и о том, что
Если делается функция преобразования, например
x>I

то она работает некоторым странным образом. Обратимся в начало обсуждения
2.1 * 100.0 = 210.0 >toInt = 209

Это реально не напрягает?

Отсюда вылезает и вопрос о том, что при вычислениях с плавающей запятой, иногда, вероятно в момент когда значение достигнет около 0 (нуля) , я получу преобразование float to boolean в виде Как вы сказали (мол, что тут не понятного) равное False

а, что, правда, есть такая логика, мол 0,999999 - это False ?
Где об этом прочитать?

и..ещё, я не подразумеваю, что делаю Trunc когда делаю => toInt - это не нормально.
Нормально это было бы документировать, чего я не нашел.
Дайте ссылку на документацию.

Спасибо.

ну попробуйте , например 0.67 to_int сделать и параллельно (0.67 + 0.5) округлить, выберите какой результат Вас устроит