3

浮動小数点型の整数部分の基数 10 の最大桁数を教えてくれるa#defineまたは何かのように、標準に何かがあるかどうかを知りたいです。numeric_limits

たとえば、最大値が 1234.567 の浮動小数点型があるとします。そのタイプの4を教えてくれる標準で定義されたものが欲しいです。

これを行うオプションはありますか?

template <typename T>
constexpr auto integral_digits10 = static_cast<int>(log10(numeric_limits<T>::max())) + 1;
4

2 に答える 2

1

探している値は次のとおりですmax_exponent10

10 nが浮動小数点型の表現可能な有限値となるような最大の正数n です。

この関係により、次のようになります。

ログ10 x = n
10 n = x

あなたの計算は、最初の方程式が機能する方法見つけることです:

log10(numeric_limits<T>::max())

の定義は、 10 n + 1max_exponent10を使用していることを説明していますが、 10 nはより小さいか等しいです。あなたが探しているものもそうですnumeric_limits<T>::max()numeric_limits<T>::max()numeric_limits<T>::max_exponent10

+ 11 の場所を説明するために、この例では as が必要になることに注意してください。(log 10 1 = 0 のため) したがって、表現するために必要な 10 桁の数字は次のnumeric_limits<T>::max()ようになります。

numeric_limits<T>::max_exponent10 + 1

手動で検証したい場合は、ここで確認できます。

http://coliru.stacked-crooked.com/a/443e4d434cbcb2f6

于 2016-09-30T13:51:12.117 に答える