7 / 8 / 2
Регистрация: 02.04.2018
Сообщений: 495
|
||||||
1 | ||||||
Баг в среде ардуино02.06.2022, 12:39. Показов 504. Ответов 2
Метки нет (Все метки)
Нашёл баг в среде Ардуино. Может быть конечно у меня корявые руки, но в принципе как говориться, тут ломаться-то нечему.
Есть функция pow(x, 3); = и вот она творит чудеса. если вызвать её и посчитать к примеру pow(-48, 3)/48; результат вычислений будет -2304 всё верно, но стоит заключить в цикл и перебирать переменную x, как начинается магия. почему-то результат вычислений функции -2303, хотя с квадратом данная функция считает всё правильно. Решил разобраться с этим вопросом и выяснил что при значениях -48 функция pow(x,3) выдаёт ответ -110591 (а должно быть -110592) поэтому при делении получается число -2 303,9791666666666666666666666667 что даёт округление к ближайшему меньшему -2303. Если заменить функцию простым умножением x*x*x/48 = то результат вычислений сразу становится правильным. Интересный баг, по отдельности функция вычисляет число верно, но стоит её загнать в цикл, как происходит магия кривого вычисления. Немного дописав программу увидел подобный баг в числах -60, -48, -36, и других числах кратные 12... что за... магия...
0
|
02.06.2022, 12:39 | |
Ответы с готовыми решениями:
2
Баг Ардуино при вычислениях В среде ардуино нет возможности выбрать порт Как проверить реле к ардуино без ардуино ESP32 в среде ардуино WEB server + MQTT |
7 / 8 / 2
Регистрация: 02.04.2018
Сообщений: 495
|
|
02.06.2022, 12:58 [ТС] | 2 |
Кстати, добавлю, на чистом языке C++ он считает верно, значит виноват сам компилятор дурины и его корявая функция pow?
0
|
636 / 391 / 75
Регистрация: 21.09.2008
Сообщений: 1,343
|
||||||
05.06.2022, 15:53 | 3 | |||||
Хм. Посмотрим.
Настоящий критерий истины - практика, верно? Вот и напишем проверку на чистом Си с использованием стандартной библиотеки avr-libc-2.0.0 и компилятора GCC-11.1 для AVR, запустим под настоящим "железом" в виде ATmega8A. У Вас какая версия компилятора была использована?
Кликните здесь для просмотра всего текста
-60:->-4500,-4500
-59:->-4278,-4278 -58:->-4064,-4064 -57:->-3858,-3858 -56:->-3658,-3658 -55:->-3466,-3466 -54:->-3280,-3280 -53:->-3101,-3101 -52:->-2929,-2929 -51:->-2763,-2763 -50:->-2604,-2604 -49:->-2451,-2451 -48:->-2304,-2303 -47:->-2162,-2162 -46:->-2027,-2027 -45:->-1898,-1898 -44:->-1774,-1774 -43:->-1656,-1656 -42:->-1543,-1543 -41:->-1435,-1435 -40:->-1333,-1333 -39:->-1235,-1235 -38:->-1143,-1143 -37:->-1055,-1055 -36:->-972,-971 -35:->-893,-893 -34:->-818,-818 -33:->-748,-748 -32:->-682,-682 -31:->-620,-620 -30:->-562,-562 -29:->-508,-508 -28:->-457,-457 -27:->-410,-410 -26:->-366,-366 -25:->-325,-325 -24:->-288,-287 -23:->-253,-253 -22:->-221,-221 -21:->-192,-192 -20:->-166,-166 -19:->-142,-142 -18:->-121,-121 -17:->-102,-102 -16:->-85,-85 -15:->-70,-70 -14:->-57,-57 -13:->-45,-45 -12:->-36,-35 -11:->-27,-27 -10:->-20,-20 -9:->-15,-15 -8:->-10,-10 -7:->-7,-7 -6:->-4,-4 -5:->-2,-2 -4:->-1,-1 -3:->0,0 -2:->0,0 -1:->0,0 0:->0,0 1:->0,0 2:->0,0 3:->0,0 4:->1,1 5:->2,2 6:->4,4 7:->7,7 8:->10,10 9:->15,15 10:->20,20 11:->27,27 12:->36,35 13:->45,45 14:->57,57 15:->70,70 16:->85,85 17:->102,102 18:->121,121 19:->142,142 20:->166,166 21:->192,192 22:->221,221 23:->253,253 24:->288,287 25:->325,325 26:->366,366 27:->410,410 28:->457,457 29:->508,508 30:->562,562 31:->620,620 32:->682,682 33:->748,748 34:->818,818 35:->893,893 36:->972,971 37:->1055,1055 38:->1143,1143 39:->1235,1235 40:->1333,1333 41:->1435,1435 42:->1543,1543 43:->1656,1656 44:->1774,1774 45:->1898,1898 46:->2027,2027 47:->2162,2162 48:->2304,2303 49:->2451,2451 50:->2604,2604 51:->2763,2763 52:->2929,2929 53:->3101,3101 54:->3280,3280 55:->3466,3466 56:->3658,3658 57:->3858,3858 58:->4064,4064 59:->4278,4278 pow(-24.0, 3.0)/48.0 = -288 pow(-12.0, 3.0)/48.0 = -36 pow(12.0, 3.0)/48.0 = 36 pow(36.0, 3.0)/48.0 = 972 pow(48.0, 3.0)/48.0 = 2304 x у Вас приращивается на целочисленную единицу (+1), а не +1.0f (если понимаете эту тонкость).Строго говоря, выявленная особенность находится не в среде Arduino, а в компиляторе AVR-GCC, который используется для сборки ПО. Вспомогательная библиотечка UART для вывода в консоль, файлы прошивок примера под ATmega8A и ATmega328p приложены в архиве.
0
|
05.06.2022, 15:53 | |
05.06.2022, 15:53 | |
Помогаю со студенческими работами здесь
3
Связь по Блютузу Андроид и Ардуино, команды с Ардуино Баг в программе. Без цикла работает нормально. С циклом выдает баг std::regex : баг на сайте или баг компилятора? Баг asio? или баг TCP стека? Забавный баг Делфи ...или не баг? Letter-spacing баг или не баг? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|