举个例子
x ** 3 # => 125
知道将**和参数3应用于x的结果是125,我如何获得x的值?是否有某种内置的方法来实现这一点?我一直在看Math模块,但没有发现任何类似的东西。
**
3
x
125
6jjcrrmo1#
使用**和1/3:
1/3
125 ** (1.0/3) # => 4.999999999999999
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个根要好一点。
.to_f
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可能不会完全按照预期的方式处理。
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]
3条答案
按热度按时间6jjcrrmo1#
使用
**
和1/3
:mbjcgjjk2#
你可以通过提高分数幂来计算第N根。例如,625的四次方根是5。
注意,在这个答案中添加
.to_f
只是为了可读性。除非需要,否则不要在代码中将其强制转换为Float。恕我直言,BigDecimals比Ruby中的浮点数“更好”--浮点数太容易失去精度,你不会得到准确的结果。上面提到的例子。125的立方根不是4。99999(重复)。5.0的准确性。编辑:Ruby Class Rational似乎处理第n个根要好一点。
但是对于一个有无理根的数来说,它仍然不那么精确。
接近了...但你应该能回到999。0正好。我的Mac电脑的计算器和Excel都能做到。关键是-小心点。如果精确性很重要,Ruby可能不会完全按照预期的方式处理。
8i9zcol23#
你也可以尝试如下:
更新