Arduino pow() делает девятки
Я временно теряю рассудок или не понимаю, как работает степенной метод, но когда я привожу 10 к степени числа, это значение равно -1. Итак:
10*10 = 100
Тогда я бы предположил, что 10^2 = 100
Итак, если бы у меня была переменная i
, которая была бы равна 2
, и я запросил у Arduino 10
в степени >i
, я ожидал, что он выполнит 10^2
, а затем выдаст мне 100
, но вместо этого я получу 99
. Что мне не хватает?
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i =0; i<5; i++){
int power = i;
Serial.print(power);
Serial.print(":");
int multiplier = pow(10,power);
Serial.println(multiplier);
}
}
@user-2147482637, 👍1
Обсуждение2 ответа
pow()
работает с числами с плавающей запятой.
Числа с плавающей запятой — это всего лишь приближение. Очень редко можно получить точные результаты, используя числа с плавающей запятой.
Вместо этого вы можете написать свой собственный небольшой целочисленная функция ipow()
.
Я поместил этот код в IDE, и для n>=2 я получил 99, 999, 9999 и т. д. Загвоздка в том, что Arduino использует арифметику с плавающей запятой для реализации функции pow(), и некоторые из ваших значений усекается как целые числа. Если вы измените:
int multiplier = pow(10,power);
в
float multiplier = pow(10,power);
Результаты должны соответствовать ожиданиям.
(Краткая причина использования чисел с плавающей запятой связана с тем фактом, что функцию pow() очень легко вычислить с использованием журналов, и это позволяет легко вычислять и нецелые числа pow(). Это также означает, что она может быть не таким точным, как вы надеетесь).
- Как установить управляющий регистр в модуле RTC DS3231 для Arduino UNO R3?
- Проверка кода таймера с использованием часов реального времени и OLED-экрана
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Питание светодиодной ленты - Сколько ампер?
- Как запомнить значения переменных после перезагрузки платы Arduino Uno R3
- Power Bank самопроизвольно отключается
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- Если USB дает 5 В, как Arduino может подавать 5 В на контакт 5 В? (И еще вопрос)
^ не является степенным оператором в C и C++. это побитовое исключающее ИЛИ, @Juraj
https://stackoverflow.com/questions/4843304/why-is-my-power-operator-not-working, @Juraj