2024/5/28(火)
今週の胎界主を読んだ。ルーサーは完全に保身に入っている。胎界物…
ボガードかなり物腰が柔らかいやつだ。パイモンの衝撃波にもバリア張ってたしもしかしてちょっと格高いキャラ??
レックスはもう完全に居場所分かって追跡モード。ルーサー助かる道あるのか?という感じだが、メッフィーはまあソロモンのパワハラがあるから来るだろうなという感じはする。レックスvsメッフィーがどうなるかだが、レックスここまでボロボロになったなら引導を渡してやって欲しい。なんか光の精獣で死ねるくらいだからレックスレーザーで命を失うのがありそうだが…
cpprefjpを読み進めた。
<limits>
std::float_round_style
これはあくまで表現方法を表す列挙値ということか。取得はnumeric_limits::round_style
でできるようだ。
std::float_denorm_style
こちらも同じく列挙体だが、非推奨らしい。
std::numeric_limits
色々な数値型の限界値や、表現方法に関する情報が提供される。中身読んだ感じ<cfloat>の方へ先に目を通すべきだった気がする。
- min, max, lowest: 浮動小数点に対するminが「0でない最小の正の値」なのがちょっとイヤ。lowestがminで良かったんじゃないのと思ってしまう。しかし、Cにおいてそれらが
FLT_MIN
とかDBL_MIN
とかのマクロになっていたようだ。名前の近さを考えると仕方なかったのかもしれない。 - digits, radix: 桁数って何のことかと思ったがradixも提供されるので、「表現可能な精度」の話だととらえるのが正しそう。
- digits10, max_digits10: 10進数文字列が与えられてそれを浮動小数点に変換しようとしたときに、どこまでの長さなら値の正確性を保証して良いかという判定に恐らく使うのだろう。max_digits10は逆に、浮動小数点数が与えられてそれを10進数文字列に変換しようとしたときに、どこまでの長さならその値の正しさを保証できるかという方のようだ。なんとこれらも規格上の最小保証がある。floatは6、double/long doubleは10。
- is_specialized: 何度も名前が出るのにcpprefjpには説明がないので調べてみたが、どうやら単にnumeric_limitsで値が定義されているかどうかという値のようだ。
is_specialized<int>
とかはtrue
だが、適当な構造体でis_specialized<hoge>
みたいなのはfalse
になる。 - is_signed: 符号付きかどうか。
- is_integer: 整数型かどうか。
- is_exact: 値が正確かどうか、らしい。実質的には浮動小数点型でないかどうかとイコールだろう。
- epsilon: FLT_EPSILONの方の説明曰く、「1と1より大きい最小の浮動小数点数との差」らしい。最小保証もある。floatは$10^{-5}$、double/long doubleは$10^{-9}$。ちょっと正しい使い方が分からんな。桁数によって制度は変わるはずだから、単純に
FLT_EPSILON
以下ならOKなのか怪しい気がする。比較用途で本当に一致するなら小さい値になるはずだから良いのか?? - round_error: これはcfloatに同じものが無いようだ。どんな桁の計算でもこの誤差におさまる…という意味ではなく、仮数部の最小桁(ULP, Units in Last Placeというらしい。LSBと似ている)を基準にしてどれだけズレうるかという基準のようだ。これが基本的には0.5ないしは1とかになる。
- min_exponent, max_exponent: 指数部の最小最大。
- min_exponent10, max_exponent10: 指数部の最小最大を10進数換算した値のようだ。あんまり用途が思いつかないが、10進数でどこまで表現可能かを説明するのには使えるか?
- has_inifinity: 正の無限を表現できるかどうか。負の無限は表現できないのか?
- has_quiet_NaN, has_signaling_NaN: NaNが存在するかどうかだが、signaling NaNとquiet NaNなるものがあるらしい。初めて知った。例外を投げるか投げないかの違いがあるらしい??
- has_denorm, has_denorm_loss: 非推奨らしい。非正規化数に対する挙動は必ずしもコンパイル時に決まるものではない、などの事情があるらしい。
- infinity: 正の無限大の取得関数。負の無限大の取得関数はないのか?
- quiet_NaN, signaling_NaN: NaNの取得関数。
- denorm_min: 非正規化数を含む最小の正の数の取得関数。非正規化数がサポートされなければ正規化数を返すらしい。
- is_iec559: IEC559という規格があるようだ。IEEE754でもあるらしい。そっちの方が聞いたことあるかも?
- is_bounded: 値の成す集合が有限集合かどうかを示すらしい。有界かではない。これがfalseになるのは自前で任意精度の数とかを作ったときに限られそうだ。
- is_modulo: 値の挙動がモジュロ演算に相当するかどうか。符号なし整数ならtrue。符号付き整数は自分で実装したりとか処理系独自の拡張とかが無い限りfalseなようだ。
- traps: トラップと言うのは例外割り込みの一種らしい。intの0除算とかでは例外が発生するからtrueだけどdoubleの0除算ではinfになるだけだからfalse、みたいな話のようだ。
- tinyness_before: cpprefjpには詳細が書いていない。環境次第ではアンダーフローを専用の機構でしっかり検出できるようだ: https://en.cppreference.com/w/cpp/types/numeric_limits/tinyness_before
- round_style: 丸めスタイルの取得。
Celeste9面の通しプレイを最近やっている。17デスまで縮まった。もはや「一発成功があり得ない」ようなマップは残っていない。
Categories: 未分類