2024/5/29(水)

ここ最近、なんとしてでも睡眠時間を取るということをしていたのだが、結局起きるのが遅く怠惰になっただけだった。最初の方は良かったのだが、途中からなんか動く気力が出ないようになってしまった。

朝の体操の習慣が切れ切れになっていたのが良くなかったのかもしれないので、一旦戻す。本当はしっかり寝てしっかり運動するのが良いのだと思う。

あと、TODOリストの管理の習慣が途切れていたのを思い出した。もしかしたらこっちの方が重要だったかもしれない。


cpprefjpを読み進めた。

<cstdint>

整数型

  • int8_t~int64_t, uint8_t~uint64_t: いつもの。こいつらcstdintヘッダだったのか。
  • int_fast8_t~int_fast64_t, uint_fast8_t~uint_fast64_t: 説明を読むと速さというより、「もし環境にそのものズバリがなくても使える保証品」みたいな味がする。
  • int_least8_t~int_least64_t, uint_least8_t~uint_least64_t: こっちはあまり存在を認識していなかった。
    fast系との対比だが、まず最高性能が出せるぴったりの整数型が無いという場合に性能を妥協してエミュレーションなどで実現するとして、速度を優先するかメモリ消費を優先するか、という話と考えると自然に理解できそう。状況によって優先したい性能は異なる。
  • intmax_t, uintmax_t: 存在を知らなかった。単純に最大の大きさの整数型。
  • intptr_t, uintptr_t: これも存在を知らなかった。size_tとかptrdiff_tの方が目にする機会が多いが、文脈次第ではこちらを使った方が意味が通りそう。

限界値マクロ

  • INT8_MIN~INTPTR_MAX: 普通に最小最大。
  • UINT8_MAX~UINTPTR_MAX: 符号なしの方に最小は無いらしい。そりゃ自明に0だから要らないか。
  • SIZE_MAX: UINTPTR_MAXと異なることはあるのだろうか?
  • PTRDIFF_MIN, PTRDIFF_MAX: SIZE_MAXもそうだが、どうしてcstddefの方ではないんだろう。
  • SIG_ATOMIC_MIN, SIG_ATOMIC_MAX: sig_atomic_tなる型があるらしい。cpprefjpに解説がない。どうやら非同期割込みとかの文脈で使われるもののようだが、あまりよくは分からない。
  • WCHAR_MIN, WCHAR_MAX: 普通にwchar_tの最大最小。
  • WINT_MIN, WINT_MAX: wint_tなる型があるようだ。これも知らなかった。wchar_tが最低限入る整数型ということだが、もしwchar_tよりも大きい型の方が計算効率良かったら1文字の表現にはそっちを使うぜみたいな話だろうか?

定数値マクロ

今のC++だったら普通にコンストラクタ形式でint32_t(1234)みたいに書くのが正しいと思うが、C言語互換で入れてるみたいなことだろうか。

<stdfloat>

C++23からのヘッダのようだ。

  • float16_t: さっそく見慣れない型。しかしIEEE754に含まれているフォーマットらしい。
  • float32_t: いつものfloat。
  • float64_t: いつものdouble。
  • float128_t: こんなのが標準に入るのか!デカい!
  • bfloat16_t: AI関連で使われているらしい浮動小数点規格に沿ったものらしい。float16_tより仮数部が少し小さくて指数部が少し大きい。TPUやnvidiaのGPUで使われている表現とのことだが、どういう値表現が性能出るのかまさに試行錯誤されている時代にそんな決め打ってしまって良いのだろうか??

Categories: