Почему 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;