Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ratio_subtract

      From cppreference.com
      <cpp‎ |numeric‎ |ratio
       
       
      Metaprogramming library
      Type traits
      Type categories
      (C++11)
      (C++11)(DR*)
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      (C++11) 
      Type properties
      (C++11)
      (C++11)
      (C++14)
      (C++11)(deprecated in C++26)
      (C++11)(until C++20*)
      (C++11)(deprecated in C++20)
      (C++11)
      Type trait constants
      Metafunctions
      (C++17)
      Supported operations
      Relationships and property queries
      Type modifications
      Type transformations
      (C++11)(deprecated in C++23)
      (C++11)(deprecated in C++23)
      (C++11)
      (C++11)(until C++20*)(C++17)

      Compile-time rational arithmetic
      Compile-time integer sequences
       
      Compile time rational arithmetic
      (C++11)
      Arithmetic
      (C++11)
      ratio_subtract
      (C++11)
      Comparison
      (C++11)
       
      Defined in header<ratio>
      template<class R1,class R2>
      using ratio_subtract=/* see below */;
      (since C++11)

      The alias templatestd::ratio_subtract denotes the result of subtracting two exact rational fractions represented by thestd::ratio specializationsR1 andR2.

      The result is astd::ratio specializationstd::ratio<U, V>, such that givenNum== R1::num* R2::den- R2::num* R1::den andDenom== R1::den* R2::den (computed without arithmetic overflow),U isstd::ratio<Num, Denom>::num andV isstd::ratio<Num, Denom>::den.

      [edit]Notes

      IfU orV is not representable instd::intmax_t, the program is ill-formed. IfNum orDenom is not representable instd::intmax_t, the program is ill-formed unless the implementation yields correct values forU andV.

      The above definition requires that the result ofstd::ratio_subtract<R1, R2> be already reduced to lowest terms; for example,std::ratio_subtract<std::ratio<1,2>,std::ratio<1,6>> is the same type asstd::ratio<1,3>.

      [edit]Example

      Run this code
      #include <iostream>#include <ratio> int main(){using two_third=std::ratio<2,3>;using one_sixth=std::ratio<1,6>;using diff= std::ratio_subtract<two_third, one_sixth>;    static_assert(std::ratio_equal_v<diff,std::ratio<13,032>>); std::cout<<"2/3 - 1/6 = "<< diff::num<<'/'<< diff::den<<'\n';}

      Output:

      2/3 - 1/6 = 1/2

      [edit]See also

      (C++11)
      adds tworatio objects at compile-time
      (alias template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/numeric/ratio/ratio_subtract&oldid=149448"

      [8]ページ先頭

      ©2009-2025 Movatter.jp