我想计算小数点右侧的非零和非重复(即 1.999999999)的数量。例如:

x.xx = 2
x.xxx = 3
x.xxx000 = 3

我可以通过将数字转换为字符串来做到这一点,但我想知道是否有使用数学的更快方法。有任何想法吗?

谢谢。

编辑:
由于计算机中数字的表示方式,许多人似乎认为这是一件愚蠢的事情。但是,请允许我解释问题的背景。假设您要编写一个方法来随机生成一个浮点数。您生成的数字必须具有一定的精度,因此您必须将随机生成的数字四舍五入到指定的精度。例如,如果精度为 2,则您的随机数不能为 0.012,必须四舍五入为 0.01。问题是您没有提供精度,而是提供了增量,在上述情况下为 0.01。给定 0.01 或 0.002 或任何其他小于 1 的此类增量,您必须找到精度。

编辑:删除了我对术语有效数字的错误用法。

最佳答案

significant digits 的数量不是您通过查看数字来计算的。您可以根据用于计算您正在查看的数字的其他数字中的有效数字位数或用于进行测量的仪器的精度来计算它。

无意义的数字既不显示也不使用,因此您的数字 x.xxx000 在小数点右侧有六位数字这一事实意味着所有六位数字都是有效的。数字 2.3 与数字 2.300 不同。

当您有一个像 2300 这样的数字时,是否将零计算为重要的问题就出现了,其中该数字是 10 的整数倍。有两个有效数字还是四个?用科学记数法来确定:2.3 × 103 或 2.300 × 103。

大多数语言(包括 C++)的 native 数字类型不处理这种有效数字的概念。一般来说,他们甚至根本不处理数字;他们处理位。如果您的实现的 float 类型是 32 位,那么所有 32 位都一直被视为重要的。

关于c++ - 确定小数点右边的非零位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1402624/

10-10 17:13