C语言 对IEEE 754的理解有问题



首先,我想指出我不是母语人士,我真的需要一些更常用的术语。

我想

提到的第二件事是,我不是一个数学天才。我真的在努力理解关于编程的一切。但是IEEE-754让我觉得它永远不会快乐。它充满了我不明白的数学术语。


什么是精度?它的用途是什么?什么是尾数,尾数是做什么用的?如何通过其大小确定float/double的范围?±符号(加减号(有什么用?(我相信它的积极/消极选择,但这与一切有什么关系?

你们没有可以给我任何简短而干净的解释吗?我花了600年的时间试图理解维基百科。我失败得非常惨重。

什么是精度?

它是指二进制浮点表示可以表示实际值的接近程度。实值具有无限的精度和无限的范围。数字值的范围和精度有限。 实际上,精度 IEEE-754 可以表示精度为 6 个有效数字(十进制(的实际值,而双精度适用于 15 个有效数字。

例如,这样做的实际效果是单个精度值:123456000.00不能与123456001.00区分开来,但同样可以表示值 0.00123456。

它的用途是什么?

精度除了定义特定浮点表示的特征外,不用于任何其他用途。

什么是尾数,尾数是做什么用的?

该术语在英语维基百科文章中没有提及,并且不精确 - 在数学中,它与此处使用的含义不同。

正确的术语是有意义的。 例如,对于十进制值0.00123456有效数为 123456123456000.00具有完全相同的意义。 这些值中的每一个都具有相同的有效值,但指数不同。 指数是一个比例因子,用于确定小数点的位置(因此是浮点(。

当然IEEE754是一个二进制浮点表示,而不是十进制,但对于术语的相同解释,使用十进制可能更容易。

如何通过其大小确定浮点/双精度的范围?

仅凭大小是不能的;你需要知道有多少位分配给有效位数,有多少位分配给指数。 然而,在 C 语言中,范围由 float.h 标头中的宏FLT_MINFLT_MAXDBL_MINDBL_MAX 定义。 浮点表示的实现的其它特征也在这里描述。

请注意,特定的编译器实际上可能不使用IEEE754,但这是大多数硬件 FPU 实现使用的格式,编译器自然会遵循该格式。 对于没有 FPU(通常是小型嵌入式处理器(的目标,可以使用其他格式。

±符号(加减号(有什么用?

它只是意味着给定的值可能是正数或负数。 它可以指特定值,也可以指示范围。 因此,±n 可以指两个离散值 -n +n,也可能表示范围 -n +n。 语境就是一切! 在本文中,它指的是离散值 +0、-0、+∞ 和 -∞。

有 3 个不同的组成部分:符号、指数、尾数

假设指数只有 2 位,则可能有 4 种组合:

binary decimal
00     0
01     1
10     2
11     3

表示的浮点值为 2指数

binary exponent-value
00     2^0 = 1
01     2^1 = 2
10     2^2 = 4
11     2^3 = 8

浮点值的范围,由指数产生。 2 位 =>最大值 = 8。

尾数将范围从给定指数划分为下一个更高指数。例如,指数为 2,尾数为一位,则可能有两个值:

exponent-value  mantissa-binary  represented floating-point value
2               0                2
2               1                3

表示的浮点值为 2指数× (1 + m1×2-1 + m2×2-2 + m3×2-3 + ...(。这里有一个3位尾数的例子:

exponent-value  mantissa-binary  represented floating-point value
2               000              2 * (1                      ) = 2
2               001              2 * (1                + 2^-3) = 2,25
2               010              2 * (1         + 2^-2       ) = 2,5
2               011              2 * (1         + 2^-2 + 2^-3) = 2,75
2               100              2 * (1 + 2^-1               ) = 3
and so on…

该符号只有一个位:
0 ->正值
1 ->负值

在 IEEE-754 中,32 位浮点数据类型具有 8 位指数(范围从 2-127 到 2128(和 23 位尾数。

1 10000010 01101000000000000000000
- 130      1,40625

表示的浮点值为:
-1 × 2(130 – 127( × (1 + 2-2 + 2-3 + 2-5( = -11,25

一试:http://www.h-schmidt.net/FloatConverter/IEEE754.html

最新更新