Ruby中的平方根比BigDecimal.sqrt更精确?

时间:2012-04-10 20:44:08

标签: ruby bigdecimal arbitrary-precision

我认为Ruby的BigDecimal类的目的是以速度为代价无限任意精确。错误:

> BigDecimal(4).sqrt(4)
=> #<BigDecimal:906602c,'0.1999999999 9999999998 66602351E1',36(36)>
> BigDecimal(4).sqrt(11)
=> #<BigDecimal:9e36850,'0.2E1',9(45)>

首先,sqrt应该没有参数,至少应该是文档。其次,如果该参数是精度,则4应该足以满足此操作(或者至少我不应该知道11位精度是正常的)。

我想要的最后一件事就是重新发明轮子,并创建一些我自己的“任意精确的平方库”。

问题:

  • 是否可以将参数设置为BigDecimal实例,以便不会发生上述情况? (意思是:它以低精度给出正确的结果)
  • 是否有关于BigDecimal对象的详细信息(这些数字在值之后是什么)?

系统:Debian,32位,ruby 1.9.3p125

1 个答案:

答案 0 :(得分:1)

inspect的大十进制文档描述了输出的含义。

关于似乎是文档错误的sqrt文档,请参阅http://bugs.ruby-lang.org/issues/5267

至于你得到的输出,我不确定 - 在这两种情况下我得到0.2E1。