C++11

标准文档 中当前头文件是通用工具库(General utilities library)中的部分内容,为了更好的表述其内容,本手册将其移至数值库(Numeric library)中的 编译时的有理数运算 主题中。

数值库(参考手册) ​数值库(标准)

通用工具库(参考手册) ​通用工具库(标准)

  • std::ratio 描述精确的有理数分数

    编译期的有理数算述

    std::ratio_add 有理数加法
    std::ratio_subtract 有理数减少
    std::ratio_multiply 有理数乘法
    std::ratio_divide 有理数除法

    编译期的有理数比较

    std::ratio_equal 用于比较两个有理数是否相等
    std::ratio_not_equal 用于比较两个有理数是否不相等
    std::ratio_less 第一个有理数是否小于第二个有理数
    std::ratio_less_equal 第一个有理数是否小于或等于第二个有理数
    std::ratio_greater 第一个有理数是否大于第二个有理数
    std::ratio_greater_equal 第一个有理数是否大于或等于第二个有理数
  • yocto std::ratio<1, 1000000000000000000000000>,如果 std::intmax_t 能描述该分母
    zepto std::ratio<1, 1000000000000000000000>,如果 std::intmax_t 能描述该分母
    atto std::ratio<1, 1000000000000000000>
    femto std::ratio<1, 1000000000000000>
    pico std::ratio<1, 1000000000000>
    nano std::ratio<1, 1000000000>
    micro std::ratio<1, 1000000>
    milli std::ratio<1, 1000>
    centi std::ratio<1, 100>
    deci std::ratio<1, 10>
    deca std::ratio<10, 1>
    hecto std::ratio<100, 1>
    kilo std::ratio<1000, 1>
    mega std::ratio<1000000, 1>
    giga std::ratio<1000000000, 1>
    tera std::ratio<1000000000000, 1>
    peta std::ratio<1000000000000000, 1>
    exa std::ratio<1000000000000000000, 1>
    zetta std::ratio<1000000000000000000000, 1>,如果 std::intmax_t 能描述该分子
    yotta std::ratio<1000000000000000000000000, 1>,如果 std::intmax_t 能描述该分子
  • namespace std {
     
        //class template ratio
        template <intmax_t N, intmax_t D = 1>
        class ratio {
        public:
            typedef ratio<num, den> type;
            static constexpr intmax_t num;
            static constexpr intmax_t den;
        };
     
     
        // ratio arithmetic            
        template <class R1, class   R2> using   ratio_add      = /*ratio*/;
        template <class R1, class   R2> using   ratio_subtract = /*ratio*/;
        template <class R1, class   R2> using   ratio_multiply = /*ratio*/;
        template <class R1, class   R2> using   ratio_divide   = /*ratio*/;
     
        // ratio comparison            
        template <class R1, class R2> struct ratio_equal;           
        template <class R1, class R2> struct ratio_not_equal;           
        template <class R1, class R2> struct ratio_less;      
        template <class R1, class R2> struct ratio_less_equal;          
        template <class R1, class R2> struct ratio_greater;         
        template <class R1, class R2> struct ratio_greater_equal;  
     
        // convenience SI typedefs         
        typedef ratio<1, 1000000000000000000000000> yocto;
        typedef ratio<1,    1000000000000000000000> zepto;
        typedef ratio<1,       1000000000000000000> atto;   
        typedef ratio<1,          1000000000000000> femto;  
        typedef ratio<1,             1000000000000> pico;   
        typedef ratio<1,                1000000000> nano;   
        typedef ratio<1,                   1000000> micro;  
        typedef ratio<1,                      1000> milli;  
        typedef ratio<1,                       100> centi;  
        typedef ratio<1,                        10> deci;   
        typedef ratio<                       10, 1> deca;   
        typedef ratio<                      100, 1> hecto;  
        typedef ratio<                     1000, 1> kilo;   
        typedef ratio<                  1000000, 1> mega;   
        typedef ratio<               1000000000, 1> giga;   
        typedef ratio<            1000000000000, 1> tera;   
        typedef ratio<         1000000000000000, 1> peta;   
        typedef ratio<      1000000000000000000, 1> exa;    
        typedef ratio<   1000000000000000000000, 1> zetta;
        typedef ratio<1000000000000000000000000, 1> yotta;
     
    }