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
, yocto
、zepto
、zetta
、yotta
, 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;
}
xxxxxxxxxx
#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()
出力
15000
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.4.7 ✅
- Visual C++: ??
備考
std::intmax_t
型が64bit幅の処理系では、SI接頭辞quecto
~zepto
、zetta
~quetta
を表現できないため、これらの型別名は定義されない。