C++/ratio
外观
< C++
定义了类模板:
template<
std::intmax_t Num,
std::intmax_t Denom = 1
> class ratio;
类模板std::ratio提供了编译时有理数算术支持。类模板的实例表示有限的有理数,前提是其分子和分母可表示为类型std::intmax_t的编译时常量。此外,分子不可以为0,也不可以为最大负值。
两个静态intmax_t数据类型num和den表示除掉最大公约数之后的分子和分母的值。但是,两个std::ratio有不同的Num和Denom是不同的类型,即使它们在约减后表示相同有理数。有理数类型的成员type表示其最约简的有理数形式,如std::ratio<3, 6>::type 为 std::ratio<1, 2>。
标准库已经定义了SI有理数:
- std::yocto std::ratio<1, 1000000000000000000000000>, 如果std::intmax_t能表示分母
- std::zepto std::ratio<1, 1000000000000000000000>, 如果std::intmax_t能表示分母
- std::atto std::ratio<1, 1000000000000000000>
- std::femto std::ratio<1, 1000000000000000>
- std::pico std::ratio<1, 1000000000000>
- std::nano std::ratio<1, 1000000000>
- std::micro std::ratio<1, 1000000>
- std::milli std::ratio<1, 1000>
- std::centi std::ratio<1, 100>
- std::deci std::ratio<1, 10>
- std::deca std::ratio<10, 1>
- std::hecto std::ratio<100, 1>
- std::kilo std::ratio<1000, 1>
- std::mega std::ratio<1000000, 1>
- std::giga std::ratio<1000000000, 1>
- std::tera std::ratio<1000000000000, 1>
- std::peta std::ratio<1000000000000000, 1>
- std::exa std::ratio<1000000000000000000, 1>
- std::zetta std::ratio<1000000000000000000000, 1>, 如果std::intmax_t能表示分子
- std::yotta std::ratio<1000000000000000000000000, 1>, 如果std::intmax_t能表示分子
以下别名模板实现了编译时有理算术:
- ratio_add
- ratio_subtract
- ratio_multiply
- ratio_divide
以下类模板实现了编译时2个有理对象比较:
- ratio_not_equal
- ratio_less
- ratio_less_equal
- ratio_greater
- ratio_greater_equal