小数问题

时间:2019-04-17 14:13:25

标签: r

我试图编写一个确定数字中小数位数的函数,但是在检查它是否有效时,发现数字精度存在问题。似乎R给数字增加了一些噪音。有办法阻止这种情况发生吗?

这是我使用的代码。我认为答案不时改变,所以我使用了set.seed()。

set.seed(100)
numberOfDecimals = function(y) {
  n = 0
  while (y %% 1 != 0) {
    print(y %% 1)
    y = y * 10
    n = n + 1
  }
  return(n)
}
a = 12.1234789
numberOfDecimals(a)

这是我得到的结果:

[1] 0.1234789
[1] 0.234789
[1] 0.34789
[1] 0.4789
[1] 0.789
[1] 0.89
[1] 0.9
[1] 2.980232e-08
[1] 2.384186e-07
[1] 1.907349e-06
[1] 1.525879e-05
[1] 0.0002441406
[1] 0.001953125
[1] 0.015625
[1] 0.25
[1] 15
Warning message:
In numberOfDecimals(a) : probable complete loss of accuracy in modulus

这里15是最终答案(小数位数),在此之前的所有内容都来自print语句。我已经研究了警告消息,但是从我发现的结果来看,这通常是由R无法正确表示大数字引起的。对我来说,12.1234789似乎不是一个很大的数字,但我想我可能是错的。

我希望这样:

[1] 0.1234789
[1] 0.234789
[1] 0.34789
[1] 0.4789
[1] 0.789
[1] 0.89
[1] 0.9
[1] 7

对于我来说,直到0.9之后才显示随机数也没有意义。我尝试做以下事情以防万一

(0.9 * 10) %% 1

但是我得到的是0。

在此先感谢任何尝试提供帮助的人!

编辑:感谢每个人都指出这不是R问题,而是浮点问题。是否有任何原因导致直到最后一步才出现此问题?还是只是随机发生?

0 个答案:

没有答案