類模板
<ratio>

std::ratio

template <intmax_t N, intmax_t D = 1> class ratio;
Ratio
此模板用於例項化表示有限有理數的型別,該型別由一個分子和一個分母表示。
分子和分母實現為 intmax_t 型別的編譯時常量。

請注意,有理數不是由此型別的物件表示,而是由型別本身表示,它使用編譯時常量成員來定義有理數。因此,ratio只能用於表達 constexpr 常量,不能包含任何值。

此模板的型別用於標準類 duration(參見 chrono 標頭檔案)。

模板引數

N
被除數。
其絕對值應在 intmax_t 的可表示值範圍內。
intmax_t 是最寬的有符號整數型別。
D
除數。
其絕對值應在 intmax_t 的可表示值範圍內,且不能為零。
intmax_t 是最寬的有符號整數型別。

成員常量

成員 constexpr描述
num分子
den分母

的值numden表示有理數的唯一最低約簡N:D。這意味著,在某些情況下,numdenom與模板引數ND:
  • 不相同。如果ND之間的最大公約數不為一,則numden是將ND除以該最大公約數的結果。
  • 符號總是由num (den表示(它總是正的):如果D為負,則num的符號與N.

成員型別

成員型別定義描述
型別ratio<num,den>的符號相反。表示有理數的等效 ratio 型別,具有唯一的最低約簡。N:D

sub_match for string literals (class)

預定義的標準 ratio 例項化ratio如下:
型別定義描述
yoctoratio<1,1000000000000000000000000>10-24 *
zeptoratio<1,1000000000000000000000>10-21 *
attoratio<1,1000000000000000000>10-18
femtoratio<1,1000000000000000>10-15
picoratio<1,1000000000000>10-12
nanoratio<1,1000000000>10-9
microratio<1,1000000>10-6
milliratio<1,1000>10-3
centiratio<1,100>10-2
deciratio<1,10>10-1
decaratio<10,1>101
hectoratio<100,1>102
kiloratio<1000,1>103
megaratio<1000000,1>106
gigaratio<1000000000,1>109
teraratio<1000000000000,1>1012
petaratio<1000000000000000,1>1015
exaratio<1000000000000000000,1>1018
zettaratio<1000000000000000000000,1>1021 *
yottaratio<1000000000000000000000000,1>1024 *
這些名稱與國際單位制(S.I.)的標準單位字首相匹配。
* 帶有星號標記的型別僅在用於其規範的兩個常量都可由 intmax_t 表示時可用。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// ratio example
#include <iostream>
#include <ratio>

int main ()
{
  typedef std::ratio<1,3> one_third;
  typedef std::ratio<2,4> two_fourths;

  std::cout << "one_third= " << one_third::num << "/" << one_third::den << std::endl;
  std::cout << "two_fourths= " << two_fourths::num << "/" << two_fourths::den << std::endl;

  typedef std::ratio_add<one_third,two_fourths> sum;

  std::cout << "sum= " << sum::num << "/" << sum::den;
  std::cout << " (which is: " << ( double(sum::num) / sum::den ) << ")" << std::endl;

  std::cout << "1 kilogram has " << ( std::kilo::num / std::kilo::den ) << " grams";
  std::cout << std::endl;

  return 0;
}

輸出
one_third= 1/3
two_fourths= 1/2
sum= 5/6 (which is 0.833333)
1 kilogram has 1000 grams