Namensräume
Varianten
Aktionen

std::ratio_add

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

Die Alias-Template std::ratio_add bezeichnet das Ergebnis der Addition zweier exakter rationaler Brüche, die durch die std::ratio-Spezialisierungen R1 und R2 dargestellt werden.

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

[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_add<R1, R2> bereits auf die niedrigsten Terme reduziert ist; zum Beispiel ist std::ratio_add<std::ratio<1, 3>, std::ratio<1, 6>> dasselbe 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 sum = std::ratio_add<two_third, one_sixth>;
 
    std::cout << "2/3 + 1/6 = " << sum::num << '/' << sum::den << '\n';
}

Ausgabe

2/3 + 1/6 = 5/6

[bearbeiten] Siehe auch

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