跳至內容

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