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