Namensräume
Varianten
Aktionen

std::ratio_divide

Von cppreference.com
< cpp‎ | numeric‎ | ratio
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Kompilierzeit-Rationalarithmetik
(C++11)
Arithmetik
(C++11)
ratio_divide
(C++11)
Vergleich
(C++11)
 
Definiert in Header <ratio>
template< class R1, class R2 >
using ratio_divide = /* siehe unten */;
(seit C++11)

Der Alias-Template std::ratio_divide bezeichnet das Ergebnis der Division zweier exakter rationaler Brüche, die durch die std::ratio-Spezialisierungen R1 und R2 repräsentiert werden.

Das Ergebnis ist eine std::ratio-Spezialisierung std::ratio<U, V>, sodass bei Num == R1::num * R2::den und Denom == R1::den * R2::num (ohne arithmetischen Überlauf berechnet), U std::ratio<Num, Denom>::num und V std::ratio<Num, Denom>::den ist.

[bearbeiten] Hinweise

Wenn U oder V nicht in std::intmax_t darstellbar ist, ist das Programm schlecht geformt. Wenn Num oder Denom nicht in std::intmax_t darstellbar ist, ist das Programm schlecht geformt, es sei denn, die Implementierung liefert korrekte Werte für U und V.

Die obige Definition erfordert, dass das Ergebnis von std::ratio_divide<R1, R2> bereits auf den niedrigsten Nenner gekürzt ist; zum Beispiel ist std::ratio_divide<std::ratio<1, 12>, std::ratio<1, 6>> derselbe Typ wie std::ratio<1, 2>.

[bearbeiten] Beispiel

#include <iostream>
#include <ratio>
 
int main()
{
    using two_third = std::ratio<2, 3>;
    using one_sixth = std::ratio<1, 6>;
    using quotient = std::ratio_divide<two_third, one_sixth>;
    static_assert(std::ratio_equal_v<quotient, std::ratio<0B100, 0X001>>);
    std::cout << "(2/3) / (1/6) = " << quotient::num << '/' << quotient::den << '\n';
}

Ausgabe

(2/3) / (1/6) = 4/1

[bearbeiten] Siehe auch

multipliziert zwei ratio-Objekte zur Kompilierzeit
(Alias-Schablone)[edit]