Почему boost::time_duration не препятствует умножению на действительное число?

В контексте огромных вычислений я оцениваю общее время вычислений во время вычислений. Для этого я сравниваю свое время с временем старта, чтобы получить продолжительность, и делю ее на уже вычисленное соотношение. Но я удивлен: нет operator * (boost::time_duration, double) существует!

Посмотрите на этот пример того, что я ожидал написать:

boost::posix_time::ptime t0 = boost::posix_time::microsec_clock::local_time();
for(unsigned long int i = 0; i < num_iterations; ++i)
{
  //
  // An iteration of my algorithm
  //

  boost::posix_time::ptime t = boost::posix_time::microsec_clock::local_time();
  boost::posix_time::time_duration d = t - t0;
  boost::posix_time::time_duration expected_d = d * ((double)n / (double)i);
}

Единственный доступный оператор operator * (boost::time_duration, int), У меня вопрос почему? Есть ли веская причина не осуществлять умножение на дробное число? Это плохая практика, чтобы реализовать это самостоятельно в boost пространство имен?

1 ответ

Решение

Вы могли бы реализовать это в пространстве имен boost, но это далеко не лучшая практика.

Я думаю, что разработчики буста имели веские основания не включать деление с плавающей запятой и умножение в posix_time::time_duration. Это, вероятно, связано с внутренним представлением времени посикса. Почему бы вам не использовать обычный способ целочисленного деления?

boost::posix_time::time_duration d = t - t0;
boost::posix_time::time_duration expected_d = (n * d) / i;
Другие вопросы по тегам