Избегайте математических вычислений с плавающей запятой, чтобы ускорить Arduino
Я читал и слышал, что математические вычисления с плавающей запятой выполняются намного медленнее, чем математические вычисления с целыми числами.
И я видел здесь процесс конвертации от чисел с плавающей запятой к целым числам
Итак, я хочу преобразовать мои плавающие математические вычисления в целочисленные.
Вот код, включающий плавающую математику:
float sensval, lpf, lps;
float sensinitial; // используется для хранения исходных данных датчика
float x, y, z;
int heigh;
int dA;
void setup() {
runSensor();
sensval = readSensorData();
sensinitial = sensval; // Установка исходных данных
lpf = lps = sensval;
}
void loop() {
sensval = readSensorData();
heigh = (float)44330 * (1 - pow(((float) sensval/sensinitial), 0.190295));
lpf = lpf + (sensval - lpf) * 0.1;
lps = lps+ (sensval - lps) * 0.05;
x = (lps - lpf) * 50;
y = x+ (z - y) * 0.1;
z = constrain(y, -500, 500);
dA += z * 100 + 2000;
}
readSensorData(); возвращает максимум 7 десятичных знаков (например, 752,4543)
Также есть расчет мощности.
Итак, как мне преобразовать математические вычисления с плавающей запятой в математические с целыми числами?
Любой код оптимизации приветствуется.
@sir mordred, 👍3
Обсуждение0
Смотрите также:
- Как использовать SPI на Arduino?
- Float печатается только 2 десятичных знака после запятой
- Отправка и получение различных типов данных через I2C в Arduino
- Светодиоды: разница между общим анодом и общим катодом
- Библиотека DHT.h не импортируется
- Как повторить кусок кода
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
Общая идея заключается в том, что вы смотрите на свои вычисления и решаете, сколько двоичных знаков (двоичный эквивалент десятичных знаков) вам нужно в ваших вычислениях или на разных этапах вычислений, и выполняете свои вычисления по порядку и/или со словом. длина, которая позволит избежать переполнения. В своих расчетах вы будете использовать целочисленные типы данных, мысленно отслеживая двоичную точку на каждом этапе расчета. Найдите арифметику с фиксированной запятой, чтобы найти много информации., @JRobert
переполнение не является проблемой, я просто хочу преобразовать мои вычисления с плавающей запятой в целочисленные вычисления, чтобы немного ускорить работу Arduino., @sir mordred
Вы действительно заметили, что он работает слишком медленно? Не пытайтесь оптимизировать без удобного эталона., @BrettAM