Оптимизированное преобразование из миллисекунд в часы: минуты: секунды: цифры в миллисекундах? - PullRequest
0 голосов
/ 17 мая 2018

каковы ваши предложения по оптимизации преобразования от миллисекунд msecsOut до псевдонима из 9 цифр iX: 8H 7H 6M 5M 4S 3S 2MS 1MS 0MS при условии, что цикл является заданным ограничением, по модулю он может быть неоптимальным, пока у меня есть:
(мы программируем с systemc на семействе FPGA Spartan-3 от XILINX)

int msecsOut = 1234123412;
// iX: 8H 7H 6M 5M 4S 3S 2MS 1MS 0MS
for (int i = 8; i >= 0; --i) {
    int digitOut = -1;
    if (i == 8) {
        digitOut = msecsOut / (1000 * 60 * 60 * 10);
        msecsOut = msecsOut % (1000 * 60 * 60 * 10);
    } else if (i == 7) {
        digitOut = msecsOut / (1000 * 60 * 60);
        msecsOut = msecsOut % (1000 * 60 * 60);
    }  else if (i == 6) {
        digitOut = msecsOut / (1000 * 60 * 10);
        msecsOut = msecsOut % (1000 * 60 * 10);
    }  else if (i == 5) {
        digitOut = msecsOut / (1000 * 60);
        msecsOut = msecsOut % (1000 * 60);
    }  else if (i == 4) {
        digitOut = msecsOut / (1000 * 10);
        msecsOut = msecsOut % (1000 * 10);
    }  else if (i == 3) {
        digitOut = msecsOut / (1000);
        msecsOut = msecsOut % (1000);
    }   else if (i == 2) {
        digitOut = msecsOut / (100);
        msecsOut = msecsOut % (100);
    }   else if (i == 1) {
        digitOut = msecsOut / (10);
        msecsOut = msecsOut % (10);
    }   else if (i == 0) {
        digitOut = msecsOut / (1);
    }
    cout << digitOut << " ";//debug only
}
cout<<endl;//debug only

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете избавиться от тестирования i (что делает ваш цикл бесполезным) с помощью массивов

int msecsOut = 1234123412;
const int factors[] = {
      1000 * 60 * 60 * 10,
      1000 * 60 * 60,
      1000 * 60 * 10,
      1000 * 60,
      1000,
      100,
      10
};
const char* symbols[] = {"H", "H", "M", "M", "S", "S", "MS", "MS"};
// iX: 8H 7H 6M 5M 4S 3S 2MS 1MS 0MS
for (int i = 0; i != sizeof(factors) / sizeof(*factors); ++i) {
    const int digitOut = msecsOut / factors[i];
    msecsOut = msecsOut % factors[i];
    std::cout << digitOut << symbols[i] << " ";
}
std::cout << msecsOut << "MS" << std::endl;
...