最終更新日時(UTC):
が更新

履歴 編集

type-alias
<ratio>

std::SI接頭辞

namespace std {
  using quecto = ratio<1, 1000000000000000000000000000000>; // C++26
  using ronto  = ratio<1,    1000000000000000000000000000>; // C++26
  using yocto  = ratio<1,       1000000000000000000000000>;
  using zepto  = ratio<1,          1000000000000000000000>;
  using atto   = ratio<1,             1000000000000000000>;
  using femto  = ratio<1,                1000000000000000>;
  using pico   = ratio<1,                   1000000000000>;
  using nano   = ratio<1,                      1000000000>;
  using micro  = ratio<1,                         1000000>;
  using milli  = ratio<1,                            1000>;
  using centi  = ratio<1,                             100>;
  using deci   = ratio<1,                              10>;
  using deca   = ratio<                             10, 1>;
  using hecto  = ratio<                            100, 1>;
  using kilo   = ratio<                           1000, 1>;
  using mega   = ratio<                        1000000, 1>;
  using giga   = ratio<                     1000000000, 1>;
  using tera   = ratio<                  1000000000000, 1>;
  using peta   = ratio<               1000000000000000, 1>;
  using exa    = ratio<            1000000000000000000, 1>;
  using zetta  = ratio<         1000000000000000000000, 1>;
  using yotta  = ratio<      1000000000000000000000000, 1>;
  using ronna  = ratio<   1000000000000000000000000000, 1>; // C++26
  using quetta = ratio<1000000000000000000000000000000, 1>; // C++26
}

概要

これらは、コンパイル時有理数であるratioを利用した、SI単位系(The International System of Units : 国際単位系)の接頭辞を表す型である。

説明 10の冪
quecto クエクト -30
ronto ロント -27
yocto ヨクト -24
zepto ゼプト -21
atto アト -18
femto フェムト -15
pico ピコ -12
nano ナノ - 9
micro マイクロ -6
milli ミリ -3
centi センチ -2
deci デシ -1
deca デカ 1
hecto ヘクト 2
kilo キロ 3
mega メガ 6
giga ギガ 9
tera テラ 12
peta ペタ 15
exa エクサ 18
zetta ゼタ 21
yotta ヨタ 24
ronna ロナ 27
quetta クエタ 30

備考

quecto, ronto, yoctozeptozettayotta, ronna, quettaは、intmax_t型で値を表現できる場合のみ定義され、表現できない場合は定義されない。

#include <iostream>
#include <ratio>
#include <chrono>

// ミリメートル、センチメートル、メートル
using milli_meter = std::chrono::duration<float, std::milli>;
using centi_meter = std::chrono::duration<float, std::centi>;
using meter       = std::chrono::duration<float, std::ratio<1>>;

// 三角形の面積
// base : 底辺
// height : 高さ
centi_meter triangle_area(centi_meter base, centi_meter height)
{
  return base * height.count() / centi_meter::rep(2.0);
}

int main()
{
  milli_meter base(3000); // 3000mm -> 300cm
  meter       height(1);  // 1m -> 100cm

  centi_meter area = triangle_area(base, height);

  std::cout << area.count() << std::endl;
}

出力

15000

バージョン

言語

  • C++11

処理系

備考

std::intmax_t型が64bit幅の処理系では、SI接頭辞quectozeptozettaquettaを表現できないため、これらの型別名は定義されない。

参照