gpt4 book ai didi

c++ - float 的整数部分中的 10 进制数字的最大位数是多少

转载 作者:太空狗 更新时间:2023-10-29 21:14:49 25 4
gpt4 key购买 nike

我想知道标准中是否有一些东西,比如 #definenumeric_limits 中的东西,它会告诉我 base-10 数字的最大数量浮点类型的组成部分。

例如,如果我有一些浮点类型,其最大值是:1234.567。我想要标准中定义的东西,它会告诉我该类型为 4。

我可以选择这样做吗?

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

最佳答案

正如 Nathan Oliver 在评论中指出的那样,C++ 提供了 std::numeric_limits<T>::digits10 .

the number of base-10 digits that can be represented by the type T without change, that is, any number with this many decimal digits can be converted to a value of type T and back to decimal form, without change due to rounding or overflow. For base-radix types, it is the value of digits (digits-1 for floating-point types) multiplied by log10(radix) and rounded down.

对此的解释是explained by Rick Regan here .总而言之,如果您的二进制浮点格式可以在有效数中存储 b 位,那么您保证能够往返最多 d 个十进制数字,其中 < em>d 是满足以下条件的最大整数

10d < 2b-1

IEEE754 binary64 的情况下(如今大多数系统上 C++ 中的标准 double),则 b = 53,并且 2b-1 = 4,503,599,627,370,496,因此格式只保证能够表示 d = 15 位数字。

然而,这个结果适用于所有 位,而您只询问整数部分。然而,我们可以通过选择 x = 2b+1 轻松找到反例,这是不能用以下格式表示的最小整数:for binary64这是 9,007,199,254,740,993,它也恰好有 16 位数字,因此 will need to be rounded .

关于c++ - float 的整数部分中的 10 进制数字的最大位数是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39776532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com