Уважаемые знатоки, обращаюсь к вас со следующим вопросом.
Не знал как правильно назвать пост, но суть такова.
Прикрепляю тестовую и скрин кода. Почему-то при вычислениях, если step равняется 0.1, 0.2, 0.3 или 0.4, в конце получается не ноль, а число в E-16 или подобной степени.
Например, шаг = 0,3 - финальный результат -1.11022E-16.
Если же шаг 0,5 и выше - то все нормально, в конце получаю "чистый" ноль.
Но в тоже время, если шаг 0,25 - то все нормально.
Ладно бы были здесь операции деления/умножения, еще бы было более понятно. Но почему в возникают такие проблемы при сложении/вычитании?
И как можно "заставить" все-таки на индикаторе изображать просто ноль, а не отрицательное число из запятой и 15-ю нулями?
Суть в том, что я делаю модуль для симуляции движения мотора. И для пользователя будет странно видеть -1.11022E-16 вместо ноля (например, когда мотор движется на домашнюю позицию).
Можно городить код из сравнением числа с нолем с точностью меньшей чем сам шаг, но хотелось бы более элегантное решение...
Заранее спасибо за советы/объяснения
Округление при вычислениях
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Округление при вычислениях
- Вложения
-
- Test Dbl.vi
- (5.48 КБ) 68 скачиваний
Мы делили апельсин - много наших полегло...
-
- assistant
- Сообщения: 118
- Зарегистрирован: 05 ноя 2020, 08:26
- Версия LabVIEW: 18, 20.0f1
- Благодарил (а): 23 раза
- Поблагодарили: 4 раза
- Контактная информация:
Re: Округление при вычислениях
Не особо знаток, но дело явно в представлении дробных чисел компьютером, с округлениями вообще всегда очень сложно было в программировании, особенно в банковских системах, где копеечка в копеечку должна совпадать. Вот как выглядит представление чисел:
Решение для индикатора - выбрать формат отображения floating point, будет 0.0, не чистый 0, но тоже прилично выглядит.-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Округление при вычислениях
Я понимаю, что дело в представлении - но чтобы прямо так...
Дефолтный Floating point пробовал, результат тот же. Но если поменять Precision Type на Digits of precision - то тогда все норм...
Дефолтный Floating point пробовал, результат тот же. Но если поменять Precision Type на Digits of precision - то тогда все норм...
Мы делили апельсин - много наших полегло...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Округление при вычислениях
Эти "грабли" мы уже проходили: viewtopic.php?p=66525#p66525 Числа с плавающей точкой так хранятся в бинарном виде согласно стандарту IEEE 754. Задаёте step = 0,1, но там никогда не будет точно 0,1, а будет 0,100000000000000006. У констант на диаграмме тоже можно изменить представление, попробуйте увеличить число знаков после запятой и увидите хвост. А вот у 0,5 хвост состоит полностью из нулей.
На контролах и индикаторах я ставлю Floating Point и Digits of Precision на 2 или 3, изредка на 4, этого вполне хватает. Никогда ещё не требовалось более точно позиционировать двигатель.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: Округление при вычислениях
Спасибо! Значит, буду более внимателен к таким мелочам.
Нашел тоже такой сайт - https://www.h-schmidt.net/FloatConverter/IEEE754.html, где все наглядно показано...
Нашел тоже такой сайт - https://www.h-schmidt.net/FloatConverter/IEEE754.html, где все наглядно показано...
Мы делили апельсин - много наших полегло...
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 23 Ответы
- 4628 Просмотры
-
Последнее сообщение maxim_MA
-
- 6 Ответы
- 1647 Просмотры
-
Последнее сообщение ladik
-
- 38 Ответы
- 13307 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 2 Ответы
- 271 Просмотры
-
Последнее сообщение Optoelectronics
-
- 4 Ответы
- 1670 Просмотры
-
Последнее сообщение Borjomy_1