C++ Ratio

Da Andreabont's Wiki.

Ratio è un tipo introdotto in C++11 per rappresentare un tipo numerico razionale (frazionario) a compile-time.

Esempio base

#include <iostream>
#include <ratio>
 
int main() {

    typedef std::ratio<2, 3> a;

    std::cout << a::num << "/" << a::den << std::endl; // Stampa 2/3

}

Operazioni a compile-time

Addizione

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_add<a, b> c; // c = 1/1

Sottrazione

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_subtract<a, b> c; // c = 1/3

Moltiplicazione

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_multiply<a, b> c; // c = 2/9

Divisione

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_divide<a, b> c; // c = 2/1

Comparazione a compile-time

Uguale

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_equal<a, b> c; // c::value = False

Non uguale

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_not_equal<a, b> c; // c::value = True

Minore

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_less<a, b> c; // c::value = False

Minore o uguale

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_less_equal<a, b> c; // c::value = False

Maggiore

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_greater<a, b> c; // c::value = True

Maggiore o uguale

typedef std::ratio<2, 3> a;
typedef std::ratio<1, 3> b;
typedef std::ratio_greater_equal<a, b> c; // c::value = True