众所周知,并非所有数字都可以表示为浮点数。例如 0.1 没有精确的浮点表示。
已经有一个问题,一个浮点数可以在给定范围内表示多少个值?但是这个问题更多地讨论了大数。很明显,并非所有如此大的数字都可以表示为浮点数。一定有间隙。
我对小数字感兴趣。假设我们查看从 0.001 到 0.999 的 3 位十进制数。其中有多少不能准确地表示为浮点数?我们可以创建一个列表吗?
还有一个类似的问题,32位浮点数可以表示多少个0-1之间的数字?但是这个问题问到底有多少个浮点数?这不是我的问题。我想知道这些数字与十进制数字 0.001 到 0.999 的匹配程度。
我知道,有一种方法可以找出一个数字是否可以表示为浮点数(什么类型的数字可以用二进制浮点数表示?)。但这有点理论化。如果所有这些数字都具有代表性的话,我们难道不能尝试一下吗?我认为,这对于大多数实际的人来说会更方便。
我尝试为此编写一小段 C 代码。我设置了一个常数,例如 0.1。但是当我在我的 C 程序中比较该常数是否真的是 0.1 时,它告诉我这两个值是相同的。当然它们是相同的,因为我比较的值具有相同的表示错误。
大概你的意思是二进制浮点数,并且有效数和指数的大小合理。 (“浮点”仅表示对数值进行缩放,使小数点按照指数的指示“浮动”。并不意味着以 2 为基数。浮点可以使用小数,在在这种情况下,从 0.001 到 0.999 的所有三位数十进制数都可以表示。)
在 0.001 到 0.999 的区间内,唯一可以用二进制浮点表示的三位十进制数字是 .125、.250、.375、.500、.625 和 .875。