1

我认为 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

4

1 回答 1

1

检查的大十进制文档描述了该输出的含义。

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

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

于 2012-04-10T21:00:46.213 回答