答案 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可能无法完全按照预期的方式处理。