# 标准库头文件 <ratio>

< cpp‎ | header

此头文件是编译时有理数算术库的一部分。

### 类
ratio | 表示精确的有理分数 (类模板)
##### 算术
ratio_add (C++11) | 在编译时相加两个 `ratio` 对象 (别名模板)
ratio_subtract (C++11) | 在编译时相减两个 `ratio` 对象 (别名模板)
ratio_multiply (C++11) | 在编译时相乘两个 `ratio` 对象 (别名模板)
ratio_divide (C++11) | 在编译时相除两个 `ratio` 对象 (别名模板)
##### 比较
ratio_equal (C++11) | 在编译时比较两个 `ratio` 对象的相等性 (类模板)
ratio_not_equal (C++11) | 在编译时比较两个 `ratio` 对象的不相等性 (类模板)
ratio_less (C++11) | 在编译时比较两个 `ratio` 对象的小于关系 (类模板)
ratio_less_equal (C++11) | 在编译时比较两个 `ratio` 对象的小于或等于关系 (类模板)
ratio_greater (C++11) | 在编译时比较两个 `ratio` 对象的大于关系 (类模板)
ratio_greater_equal (C++11) | 在编译时比较两个 `ratio` 对象的大于或等于关系 (类模板)
##### 常量
`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 {

        // 类模板 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 算术
        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 比较
        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;

        // 便利 SI typedef
        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;

    }