如何在Ruby中获取数字的第n个根?

时间:2014-01-16 08:39:06

标签: ruby

例如

x ** 3 # => 125

知道将**3参数x应用于125的结果是x,我如何获得{{1}}的值? 这有什么内置方法吗?我一直在查看Math模块,但没有找到类似的内容。

3 个答案:

答案 0 :(得分:21)

**1/3一起使用:

125 ** (1.0/3)
# => 4.999999999999999

答案 1 :(得分:1)

你也可以尝试如下:

irb(main):005:0> 125**(3**-1)
=> 5
irb(main):006:0> 125**(3**-1.0)
=> 4.999999999999999
irb(main):007:0>

<强>更新

C:\Users >ruby -v
ruby 1.9.3p448 (2013-06-27) [i386-mingw32]

答案 2 :(得分:1)

你可以通过提升到分数幂来做第N个根。例如,625的第4个根是5.

(BigDecimal.new(625)**(1.0/4.0)).to_f
# => 5.0

请注意,仅在此答案中添加.to_f以提高可读性。除非您需要,否则不要将其转换为代码中的Float。恕我直言,BigDecimals比Ruby中的Floats“更好” - 浮点数太容易失去精度,你将无法获得准确的结果。例如上面接受的awnser。 125的立方根不是4.99999(重复)。它完全是5.0。

编辑:Ruby类Rational似乎更好地处理了第n个根。

2.3.3 :007 > 625.to_r ** 0.25
=> 5.0

但是,对于产生无理根的数字,它仍然不那么精确。

2.3.3 :024 > (999.to_r ** 0.25) ** 4
=> 998.9999999999999

关闭......但你应该能够准确地回到999.0。我的Mac计算器和excel可以做到。要点 - 小心点。如果精度很重要,Ruby可能无法完全按照预期的方式处理。