实数的浮点表示不是唯一的

Floating point representation of a real number is not unique

提问人:Iti 提问时间:12/23/2022 更新时间:12/25/2022 访问量:169

问:

我正在阅读有关实数的浮点表示的文章。
在任何具有算术基数 β 的实数系统中,实数 x 可以表示为
x=(0.d 1 d2 --- d t dt+1---) β X βe (1) 其中 0≤di≤β-1
现在考虑二进制系统中的 (0.5
10
在二进制系统中, (0.5){10}=(0.1)2 (2)
但是我们可以看到 1/2=(1/2 2)+(1/2 3)+----
(0.5)10=(0.01111---)2 (3)

从 (2)(3) 中我们可以看到同一个数字有两个浮点表示。

我读到过,可以通过考虑“归一化浮点表示”(即
d1 ≠ 0)来消除这种歧义

但是对于归一化的浮点表示,我们仍然有歧义。
(0.5)10=(0.100000)2 (2(a)) (0.5)10=((0.1111111----) X 2-1) (3(a))

因此,从(2(a))和(3(a))中,我们可以看到,即使使用归一化浮点表示,歧义仍未解决。 有人能说出我是否正确吗?如何解决这种歧义?

浮点 语言不可知离 散数学

评论

1赞 chtz 12/24/2022
在实际存储一个数字时,你只能存储有限数量的数字,这解决了歧义(但当然也意味着你不能存储每个实数)。
3赞 Eric Postpischil 12/24/2022
浮点格式中没有“+----”;在正常的浮点编码中,没有位或位的组合或比特的函数,表明它的任何部分“永远持续下去”。如果有,当然,也许你可以有两个相同数字的表示形式。在通常用于二进制浮点的格式中,没有相同数字的多个表示形式(除了 +0 和 -0)。在某些十进制格式中,您可能有多种表示形式,例如 3.1•10^1 和 31•10^0。
2赞 Steve Summit 12/28/2022
我们可以看到,同一个数字有两个浮点表示。这在真正的数学中是正确的,在真实实数的基数符号表示中。维基百科在0.999999...上有一篇关于它的文章。但是关于计算机浮点,要记住的一个关键是,计算机浮点不是真正的数学,它不能真正表示实数。因此,像您的 (2) 和 (3) 这样的结果在计算机浮点方面基本上没有意义。
0赞 aka.nice 2/28/2023
@SteveSummit它不仅仅是浮点数:我们只能用算法计算出可数的无穷大实数。因此,即使我们用代数数或某种形式的超越来扩展我们的数表示,这也不会包括绝大多数实数。

答:

0赞 chux - Reinstate Monica 12/24/2022 #1

...使用归一化浮点表示,我们仍然存在歧义。

没有歧义。


2(a)) (0.5)10 = (0.100000)2 (3(a))I (0.5)10 = ((0.1111111----)2 X 2-1 (作为无穷级数) (3(a))F (0.5)10 = ((0.11111111----)2 X 2-1
(作为有限级数)

2(a))为真。
3(a))我是真的。
3(a))F 为 false,因为浮点值中的项数是有限的。这并不比 1.0 等于 0.9999999999999999 更正确。

3(a))I对于普通二进制浮点是不可能的。除 +0.0 和 -0.0 外,所有有限值只有 1 种编码。

评论

0赞 Iti 12/24/2022
谢谢你的回答。我有一个基本问题。我们知道,对于有限的精度,数字是四舍五入的。因此,计算机可以对 0.5 的第二个表示形式进行四舍五入,从而存储它时有一些错误。计算机如何决定采用哪种表示?是误差是选择数字表示的标准,因为在存储 0.5 的第一个表示时不会有错误。
1赞 Andrew 12/24/2022
(3(a))(0.5)10 = ((0.1111111----)2 X 2-1 为真。现实世界的浮点数是有限的,因此 0.1111111---- 不存在。
1赞 chux - Reinstate Monica 12/25/2022
@Iti “我们知道,对于有限的精度,数字是四舍五入的。 -->并非总是如此。代码可以精确地以浮点数编码。0.5
1赞 chux - Reinstate Monica 12/25/2022
@Iti“因此,计算机可以对 0.5 的第二个表示形式进行四舍五入,从而在存储时出现一些错误”是错误的,因为在具有有限内存的计算机中不可能实现具有无限级数的第二个表示。编译器读取代码并隐藏以尽可能编码确切的浮点值。如果不能,则将其转换为下一个更高或更低的可编码浮点指针值。选择通常是最接近的。
1赞 chux - Reinstate Monica 12/25/2022
@Iti “对于十进制浮点常数,...,结果是最接近的可表示值,或者是紧邻最接近的可表示值的较大或较小的可表示值,以实现定义的方式选择”。C17 § 6.4.4.2 3.