为什么boost::time_duration不实现乘以实数?
Why boost::time_duration doesn't implement multiplication by a real number?
在一个巨大的计算环境下,我在计算过程中估计了计算时间的总时间。为此,我将我的时间与开始时间进行比较以获得持续时间,并将其除以已经计算出的比率。但我很惊讶:没有 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
命名空间中自己实现它是一种不好的做法吗?
您可以在 boost 命名空间中实现它,但这远非最佳实践。
我认为 boost 开发人员有充分的理由不将浮点除法和乘法包含到 posix_time::time_duration。这可能与 posix 次的内部表示有关。为什么不用通常的方法做整数除法呢?
boost::posix_time::time_duration d = t - t0;
boost::posix_time::time_duration expected_d = (n * d) / i;
在一个巨大的计算环境下,我在计算过程中估计了计算时间的总时间。为此,我将我的时间与开始时间进行比较以获得持续时间,并将其除以已经计算出的比率。但我很惊讶:没有 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
命名空间中自己实现它是一种不好的做法吗?
您可以在 boost 命名空间中实现它,但这远非最佳实践。
我认为 boost 开发人员有充分的理由不将浮点除法和乘法包含到 posix_time::time_duration。这可能与 posix 次的内部表示有关。为什么不用通常的方法做整数除法呢?
boost::posix_time::time_duration d = t - t0;
boost::posix_time::time_duration expected_d = (n * d) / i;