Namensräume
Varianten
Aktionen

std::ratio_multiply

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_multiply
(C++11)
Vergleich
(C++11)
 
Definiert in Header <ratio>
template< class R1, class R2 >
using ratio_multiply = /* siehe unten */;
(seit C++11)

Die Alias-Template std::ratio_multiply bezeichnet das Ergebnis der Multiplikation 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, wenn Num == R1::num * R2::num und Denom == R1::den * R2::den (ohne arithmetischen Überlauf berechnet) gilt, U der std::ratio<Num, Denom>::num und V der std::ratio<Num, Denom>::den ist.

[bearbeiten] Anmerkungen

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 setzt voraus, dass das Ergebnis von std::ratio_multiply<R1, R2> bereits auf den niedrigsten Nenner reduziert ist; zum Beispiel ist std::ratio_multiply<std::ratio<1, 6>, std::ratio<4, 5>> derselbe Typ wie std::ratio<2, 15>.

[bearbeiten] Beispiel

#include <iostream>
#include <ratio>
 
int main()
{
    using two_third = std::ratio<2, 3>;
    using one_sixth = std::ratio<1, 6>;
    using product = std::ratio_multiply<two_third, one_sixth>;
    static_assert(std::ratio_equal_v<product, std::ratio<13, 117>>);
    std::cout << "2/3 * 1/6 = " << product::num << '/' << product::den << '\n';
}

Ausgabe

2/3 * 1/6 = 1/9

[bearbeiten] Siehe auch

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