c - 如何确定 float 尾数的最大正基数 10 值?

标签 c floating-point permutation ieee-754

在尝试理解 int 时,如果我知道 int 的大小(以位为单位),我可以使用排列公式来确定 int 的最大正负基数 10 值。所以如果一个signed int是16位宽,我可以用2^16来确定可能的排列数,然后可以用2^15计算最大正数和最大负数。

在 32 位 float 中,24 位分配给有效数及其符号。如果我们认为符号为正,则 2^23 将是最大排列数。我怎样才能从这个数字 2^23 中得到有效数字的最大值?还是我对 float 的理解有问题?

最佳答案

ieee-754使用 significand 而不是 mantissa

C 没有定义尾数。 C 使用有效数

常见 float正常1 值有一个 24 位有效位,由 1 个值为 1 的隐含位和 23 个显式编码的二进制小数位组成。所有 224 组合都是可能的。

最大尾数是1.11111111 11111111 11111112 或1.9999998807907104492187510 或(2.0-2-23) .

当它与有限数 2(254-127) 的最大二进制指数组合时,最大 floatFLT_MAX 为 340282346638528859811704183484516925440.0或大约 3.402823466e+38。


1对于子数字,没有隐含位。

最大有效位是0.11111111 11111111 11111112 或 0.9999998807907104492187510

关于c - 如何确定 float 尾数的最大正基数 10 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65787418/

相关文章:

c - 实现简单 linux shell 的问题

c - 从 while 循环将值传递到线程

matlab - 在 Matlab 中检查给定原始矩阵和更改矩阵的行交换

c - 在 C 中,stdout 缓冲区的大小是多少?

c - 传递给函数的二维数组

Java 6 - 创建并检测第一个高于 Float.MAX_VALUE 的 Double 值

c++ - gcc 的 __float128 float 是否考虑了当前的舍入模式?

c - 将双关语输入整数并排序

r - 在行总和等于 1 的条件下所有可能的二进制数据矩阵

java - 创建所有可能的诗歌排列