Прошу помочь разобраться - кто хуже в школе учился я или МК?
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4379623#p4379623"]...продемонстрируйте пожалуйста код, в котором pow(2,2); без костылей результат 4 дает.[/uquote]
- Вложения
-
- pow.jpg
- (60.49 КБ) 82 скачивания
- Реклама
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Симулятор? )
Результат аппаратнозависим.
Результат аппаратнозависим.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Arduino UNO, Arduino IDE v1.8.19
(Не "исправлено"
, "ошибки" есть в большей степени).
еще можно использовать: до ^6
И Ардуино тут не при чем, как писали коллеги.
(Не "исправлено"
---10^0 = 1.00
10^1 = 10.00
10^2 = 100.00
10^3 = 1000.00
10^4 = 10000.00
10^5 = 99999.98
10^6 = 999999.68
10^7 = 9999984.00
еще можно использовать: до ^6
Код: Выделить всё
for (byte i = 0; i < 8; i++) {
...
float z = pow(10, i);
long j = (long)round(z);
...
А лучше (мало памят) и точно: с циклом, с умножением.10^0 = 1
10^1 = 10
10^2 = 100
10^3 = 1000
10^4 = 10000
10^5 = 100000
10^6 = 1000000
10^7 = 9999984
И Ардуино тут не при чем, как писали коллеги.
- Viper_Snake
- Электрический кот
- Сообщения: 1050
- Зарегистрирован: Вс мар 01, 2009 19:47:16
- Откуда: Ростов-на-Дону
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Martian",url="/forum/viewtopic.php?p=4379632#p4379632"]
Да блин...
я же написал - тип переменной uint16_t - двухбайтное, целое, беззнаковое.
Нет. Эта функция изначально такая в Си. Просто надо как-то помнить язык, ну и в случае непонятных результатов всегда обращать в первую очередь внимание на типы. Сколько граблей поломано даже с простым знаковое-беззнаковое, когда по ошибке не то взято. А плавающая точка это всегда источник счастия...[/uquote]Viper_Snake писал(а):Исходя из этого, если я не могу с помощью данной функции без костылей получить тот результат, который ожидается, имею полное право считать эту функцию ущербной.
Да блин...
Не важно чем все начнется. Важно чем кончится!
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Лучше не использовать эту функцию. Есть много способов получить результат без использования pow.
Да, с математической стороны интересно.
Да, с математической стороны интересно.
Последний раз редактировалось veso74 Ср мар 01, 2023 21:10:42, всего редактировалось 1 раз.
- Реклама
- Viper_Snake
- Электрический кот
- Сообщения: 1050
- Зарегистрирован: Вс мар 01, 2009 19:47:16
- Откуда: Ростов-на-Дону
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="veso74",url="/forum/viewtopic.php?p=4379637#p4379637"]Arduino UNO, Arduino IDE v1.8.19
(Не "исправлено"
, "ошибки" есть в большей степени).
еще можно использовать: до ^6
И Ардуино тут не при чем, как писали коллеги.[/uquote]
Если мало памяти, всякие float и double лучше вовсе обходить стороной. На 328 меге можно особо не париться, там ее как у дурака фантиков. Мои ходовые камни это тини 13 и серия 24-84, вот там все гораздо интереснее.
(Не "исправлено"
---10^0 = 1.00
10^1 = 10.00
10^2 = 100.00
10^3 = 1000.00
10^4 = 10000.00
10^5 = 99999.98
10^6 = 999999.68
10^7 = 9999984.00
еще можно использовать: до ^6
Код: Выделить всё
for (byte i = 0; i < 8; i++) {
...
float z = pow(10, i);
long j = (long)round(z);
...
А лучше (мало памят) и точно: с циклом, с умножением.10^0 = 1
10^1 = 10
10^2 = 100
10^3 = 1000
10^4 = 10000
10^5 = 100000
10^6 = 1000000
10^7 = 9999984
И Ардуино тут не при чем, как писали коллеги.[/uquote]
Если мало памяти, всякие float и double лучше вовсе обходить стороной. На 328 меге можно особо не париться, там ее как у дурака фантиков. Мои ходовые камни это тини 13 и серия 24-84, вот там все гораздо интереснее.
Не важно чем все начнется. Важно чем кончится!
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Я согласен. ATtiny13A тоже любимый МК.
Но пока в теме мы не прокомментировали аппаратную часть ни разу. Пишем о математике и коде.
А например, сегодня на столе была экспериментальная установка на следующего МК в коллекцию, есть float(32), float(48), float(64), int32, int48, int64. Для меня это тоже интересно.
P.S. Пожалуйста, не цитируйте все сообщения.
Но пока в теме мы не прокомментировали аппаратную часть ни разу. Пишем о математике и коде.
А например, сегодня на столе была экспериментальная установка на следующего МК в коллекцию, есть float(32), float(48), float(64), int32, int48, int64. Для меня это тоже интересно.
P.S. Пожалуйста, не цитируйте все сообщения.
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4379646#p4379646"]Да блин...
я же написал - тип переменной uint16_t - двухбайтное, целое, беззнаковое.[/uquote] и? pow() имеет переопределение, работающее с uint16_t ? может хватит тупить-то?
нет никаких проблем с возведением в целую степень. мартышка и очки начинается. Функция кривая... ну сделай некриво 3.14^5.76
нет никаких проблем с возведением в целую степень. мартышка и очки начинается. Функция кривая... ну сделай некриво 3.14^5.76
Последний раз редактировалось Martian Ср мар 01, 2023 21:35:47, всего редактировалось 1 раз.
- Viper_Snake
- Электрический кот
- Сообщения: 1050
- Зарегистрирован: Вс мар 01, 2009 19:47:16
- Откуда: Ростов-на-Дону
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Прошу прощения за оверквотинг - с телефона не очень удобно редактировать пост. Ну насчет аппаратной части под рукой сейчас только 328.
Добавлено after 8 minutes 18 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4379659#p4379659"]и? pow() имеет переопределение, работающее с uint16_t ? может хватит тупить-то?[/uquote]
Алилуйя! Функция принимает оба аргумента в виде double. А мужики то и не знают.
Добавлено after 8 minutes 18 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4379659#p4379659"]и? pow() имеет переопределение, работающее с uint16_t ? может хватит тупить-то?[/uquote]
Алилуйя! Функция принимает оба аргумента в виде double. А мужики то и не знают.
Не важно чем все начнется. Важно чем кончится!
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4379660#p4379660"]...Функция принимает оба аргумента в виде double. А мужики то и не знают.[/uquote]
написано черным по белому:
https://www.arduino.cc/reference/en/lan ... /math/pow/
написано черным по белому:
https://www.arduino.cc/reference/en/lan ... /math/pow/
Syntax
pow(base, exponent)
Parameters
base: the number. Allowed data types: float.
exponent: the power to which the base is raised. Allowed data types: float.
Re: Прошу помочь разобраться - кто хуже в школе учился я или
ну только один пока не знает. Остается теперь догадаться о типе результате.
- Eats
- Потрогал лапой паяльник
- Сообщения: 309
- Зарегистрирован: Сб фев 18, 2023 21:51:01
- Откуда: Санкт-Петербург
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4379623#p4379623"]И, если не затруднит, продемонстрируйте пожалуйста код, в котором pow(2,2); без костылей результат 4 дает.[/uquote]Дык демонстрировали ведь уже на предыдущей странице:
[uquote="Eats",url="/forum/viewtopic.php?p=4379449#p4379449"]вот только что добавил в в свой проект на атмеге48 три ваших строчки и заказал delay(c)
uint16_t a = 2;
uint16_t b = 2;
uint16_t c = pow(a,b);
delay(c);
и вот что ардуина 1.8.13 мне накомпилировала:
ldi r22, 0x04 ; 4
ldi r23, 0x00 ; 0
ldi r24, 0x00 ; 0
ldi r25, 0x00 ; 0
rcall .-1574 ; 0x1c6 <delay>[/uquote]
Без объявления float ардуина сгенерировала целочисленный результат, равный 4. Что просили, то и получили. Сколько ещё надо демонстрировать?
[uquote="Eats",url="/forum/viewtopic.php?p=4379449#p4379449"]вот только что добавил в в свой проект на атмеге48 три ваших строчки и заказал delay(c)
uint16_t a = 2;
uint16_t b = 2;
uint16_t c = pow(a,b);
delay(c);
и вот что ардуина 1.8.13 мне накомпилировала:
ldi r22, 0x04 ; 4
ldi r23, 0x00 ; 0
ldi r24, 0x00 ; 0
ldi r25, 0x00 ; 0
rcall .-1574 ; 0x1c6 <delay>[/uquote]
Без объявления float ардуина сгенерировала целочисленный результат, равный 4. Что просили, то и получили. Сколько ещё надо демонстрировать?
Всего доброго.
Евгений.
Евгений.
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1915
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Убрать оптимизацию. по умолчанию на макс.
- Eats
- Потрогал лапой паяльник
- Сообщения: 309
- Зарегистрирован: Сб фев 18, 2023 21:51:01
- Откуда: Санкт-Петербург
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="veso74",url="/forum/viewtopic.php?p=4379684#p4379684"]Убрать оптимизацию. по умолчанию на макс.[/uquote]Зачем же убрать-то? Топикстартер не указывал, что у него оптимизация выключена. А смысл языков высокого уровня в том и состоит, что если кто-то не умеет мыслить логически, то за него надо это делать, в том числе и производить оптимизацию. Я бы посмотрел, как топикстартер стал бы писать на асме возведение в степень (произвольную, разумеется). Особенно для 13-й тиньки, которую тут нахваливали и у которой нет команды умножения.
Всего доброго.
Евгений.
Евгений.
- Viper_Snake
- Электрический кот
- Сообщения: 1050
- Зарегистрирован: Вс мар 01, 2009 19:47:16
- Откуда: Ростов-на-Дону
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Господин EATS, я бы попросил вас немного гонор поубавить. В стартовом посте я лишь задал вопрос, почему функция возведения в степень из коробки делает вычисления отличные от ожидаемых, а так же уточнил, что раньше ею никогда не пользовался. И асм тут привязывать не надо - в данном разделе обсуждается язык программирования более высокого уровня. Понадобится на тини13 умножать - умножим, хотя с таким камнем проще без подобных операций обходится.
Не важно чем все начнется. Важно чем кончится!
- КРАМ
- Друг Кота
- Сообщения: 25386
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Eats",url="/forum/viewtopic.php?p=4380007#p4380007"]Зачем же убрать-то?[/uquote]
А затем, что при включенной никакого возведения в степень может и не быть... Если переменной в коде присвоено единственное значение, то компилятор вправе обойтись без рантайма. Что мы и наблюдаем...
А затем, что при включенной никакого возведения в степень может и не быть... Если переменной в коде присвоено единственное значение, то компилятор вправе обойтись без рантайма. Что мы и наблюдаем...
Re: Прошу помочь разобраться - кто хуже в школе учился я или
[uquote="Viper_Snake",url="/forum/viewtopic.php?p=4379564#p4379564"]Никогда ею не пользовался, а тут потребовалось по быстрому бегущий огонек на трех регистрах сочинить для ребенка - решил его через степень двойки организовать от лени и на такие вилы напоролся. Программа примитивная до безобразия - считаем степень двойки от 0 до 23 и кормим три регистра результатом .[/uquote]
охтыжблин... нифига себе
охтыжблин... нифига себе
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
- Viper_Snake
- Электрический кот
- Сообщения: 1050
- Зарегистрирован: Вс мар 01, 2009 19:47:16
- Откуда: Ростов-на-Дону
Re: Прошу помочь разобраться - кто хуже в школе учился я или
А то. Еще и Три регистра - потрошим четырехбайтную переменную. Байтораздирающее зрелище.охтыжблин... нифига себе
Добавлено after 1 minute 30 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4380091#p4380091"][uquote="Eats",url="/forum/viewtopic.php?p=4380007#p4380007"]Зачем же убрать-то?[/uquote]
А затем, что при включенной никакого возведения в степень может и не быть... Если переменной в коде присвоено единственное значение, то компилятор вправе обойтись без рантайма. Что мы и наблюдаем...
А, кстати да. Переменная то не константой задавалась, а менялась в программе.
Не важно чем все начнется. Важно чем кончится!
Re: Прошу помочь разобраться - кто хуже в школе учился я или
сдвиговый регистр как бэ сразу намекает на сдвиг 1 единички, просто изменяя счётчик цикла, куда уж ленивее и никаких переменных не надо...
- Viper_Snake
- Электрический кот
- Сообщения: 1050
- Зарегистрирован: Вс мар 01, 2009 19:47:16
- Откуда: Ростов-на-Дону
Re: Прошу помочь разобраться - кто хуже в школе учился я или
Ну как бы да, но без экспериментов жить скучно. В свое время, при изучении TM1628 экспериментов по оптимизации работы с нею было очень много, пока наиболее быстрый и эффективный метод не был найден.сдвиговый регистр как бэ сразу намекает на сдвиг 1 единички, просто изменяя счётчик цикла, куда уж ленивее и никаких переменных не надо...
Добавлено after 1 minute 38 seconds:
Re: Прошу помочь разобраться - кто хуже в школе учился я или МК?
Кстати, кто будет с TM1628 работать - не верьте даташиту родному - она умеет матрицу кнопок 10x2 а не 8x2.
Не важно чем все начнется. Важно чем кончится!


