什么是红宝石中最好的数值精度

时间:2010-12-13 15:42:16

标签: ruby

我想知道,我如何才能在红宝石上获得最佳精度。有人告诉我,最佳精度可能介于0和1之间,因为当你进入更大的数字时,步骤也会增加。

我想找出一种方法可以知道最小浮点数是多少以及下一个浮点数是多少,那么精度就是差值吧?如果我是对的,我怎么能在红宝石上做到这一点?

我不确定如何使用此http://ruby.wikia.com/wiki/Float来查找该信息。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:3)

就有效数字而言,无论比例如何,精度都是相同的。也就是说,如果您将范围从[0.0,1000.0]缩小到[0.0,1.0],只需将自然范围中的数字除以1000.0,就不会对范围的精度产生明显的影响。实际上,较大的范围将具有稍微更高的精度,因为它完全包含较小的范围。

至于发现绝对精度,你有两个问题:

  1. 绝对精度取决于幅度,它在[0,1]范围内“无限”变化(lim x →0 log( x < / em>)= - ∞)。因此,该范围内的数字没有一个精度。您只能在范围内的给定点导出绝对精度。
  2. 发现最小步骤的常用技术 - 称为ulp - 是将float的位表示解释为整数,将其递增1,并将结果重新解释为float。 Ruby不会,AFAIK,让你这样做。
  3. 然而,有一个迭代的解决方案。只需在数字上加1.0并减去((x + 1.0) - x)。如果差值为零,则将加数((x + 2.0) - x)加倍并重复,直到差值为非零。否则,将加数减半(至0.5)并重复,直到差值为零。无论何时停止,产生非零差异的最低加数是ulp。 (我从模糊的记忆中描述了这一点,所以它可能是NQR。)

答案 1 :(得分:1)

您可以使用类Rational - 它将非整数存储为两个Integer的分数,(据我所知)将自动转换为Bignum,需要。

答案 2 :(得分:1)

Flt ruby​​库提供任意浮点精度。