std::numeric_limits<T>::is_exact ??
std::numeric_limits<T>::is_exact
の言わんとしていることがサッパリ分からない…。
cppreference.com とかじゃ分からず、
ISO も読んでみたが情報量としては大して変わらない。
static constexpr bool is_exact;
19 True if the type uses an exact representation. All integer types are exact, but not all exact types are integer. For example, rational and fixed-exponent representations are exact but not integer.
20 Meaningful for all specializations.
"exact representation"、「正確な表現」というのが何を言わんとしているのか…。 とりあえず、この文章から分かることは
ということなんだが、結局 "exact representation" の定義はよく分からない。
ある型に対して「表現できる」と期待される値域において変換上の誤差が生じるか、みたいな話だろうか…。
表現する型 | 表現できると期待される値域 | is_exact |
---|---|---|
整数型 | 整数型それぞれの値域 | true |
有理数型 | 分母分子それぞれの値域 | true |
固定小数点型 | 内部表現の整数型の値域と固定指数によって決まる値域 | true ? |
浮動小数点型 | false ? |
「?」 のついてるところが私の理解の及ばない部分。 浮動小数点数は指数部と仮数部の兼ね合いで「実世界上での同じ値を表現できる複数の値」が存在すると言ってるんだろうか…。 でも、それも仮数部が必ずケチ表現だとなれば単一の表現にならないっけ…?? んーむ、わからん…。 知りたかったのは固定小数点型は exact か否か、だったのでとりあえず忘れてもいいんだけど、スッキリしないな…。
*1:いわゆる固定小数点のことだろう