Избегайте математических вычислений с плавающей запятой, чтобы ускорить 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)

Также есть расчет мощности.

Итак, как мне преобразовать математические вычисления с плавающей запятой в математические с целыми числами?

Любой код оптимизации приветствуется.

, 👍3

Обсуждение

Общая идея заключается в том, что вы смотрите на свои вычисления и решаете, сколько двоичных знаков (двоичный эквивалент десятичных знаков) вам нужно в ваших вычислениях или на разных этапах вычислений, и выполняете свои вычисления по порядку и/или со словом. длина, которая позволит избежать переполнения. В своих расчетах вы будете использовать целочисленные типы данных, мысленно отслеживая двоичную точку на каждом этапе расчета. Найдите арифметику с фиксированной запятой, чтобы найти много информации., @JRobert

переполнение не является проблемой, я просто хочу преобразовать мои вычисления с плавающей запятой в целочисленные вычисления, чтобы немного ускорить работу Arduino., @sir mordred

Вы действительно заметили, что он работает слишком медленно? Не пытайтесь оптимизировать без удобного эталона., @BrettAM