我很好奇为什么std::ratio
只公开num
和den
值,而不是某些value
成员代表合理价值的原因。比率,可能是形式
static constexpr double value = num / den;
我想这可能是因为
但我很好奇是否有其他充分的理由让标准中缺少单一价值成员?
ASSIDE:
对我来说有一个实际的应用,因为我正在寻找为strongly-typed unit library实现一个更强类型的std::ratio
版本,我一直在努力,为此我认为像下面这样有意义(假设我没有错过对std::ratio
和const-ness的一些理解)
template<typename UnitType, std::intmax_t Num, std::intmax_t Denom = 1>
struct unit_ratio : private std::ratio<Num, Denom>
{
static const UnitType value() { return UnitType((double)num / den);
};
在这种情况下,显然在用户代码中执行num / den
与返回包含值UnitType
的{{1}}不同,但我有点担心它是一个不好的想法,因为num / den
没有做类似的事情。
答案 0 :(得分:5)
也许是因为没有浮点或双精度完全等于简单的1/3
或1/5
。只有通过使用整数系数的1/2 n 的线性组合获得的比率具有精确的IEE754浮点表示。
您必须记住,std::ratio
代表有理数字,即num / den形式的数字,其中num和den都是整数值。
所以恕我直言,如果你愿意,你可以定义一个 float_approx ,但不要把它称为值,除非你真的想面对两个不同比率仍然会共享相同值的丑陋案例