如何在Ruby中得到一个数字的n次方根?

dzjeubhm  于 2023-04-29  发布在  Ruby
关注(0)|答案(3)|浏览(122)

举个例子

x ** 3 # => 125

知道将**和参数3应用于x的结果是125,我如何获得x的值?是否有某种内置的方法来实现这一点?我一直在看Math模块,但没有发现任何类似的东西。

6jjcrrmo

6jjcrrmo1#

使用**1/3

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

mbjcgjjk2#

你可以通过提高分数幂来计算第N根。例如,625的四次方根是5。

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

注意,在这个答案中添加.to_f只是为了可读性。除非需要,否则不要在代码中将其强制转换为Float。恕我直言,BigDecimals比Ruby中的浮点数“更好”--浮点数太容易失去精度,你不会得到准确的结果。上面提到的例子。125的立方根不是4。99999(重复)。5.0的准确性。
编辑:Ruby Class 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可能不会完全按照预期的方式处理。

8i9zcol2

8i9zcol23#

你也可以尝试如下:

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]

相关问题