I suppose I should ask this in a Ruby forum, but since I'm so used to slinging other languages here
To find the Nth root of number is simple: raise the number to the reciprocal of N. For example, to find the cube root of 8:
$ perl -le 'print 8 ** (1/3)'
But you can't quite do that in Ruby:
$ ruby -e 'puts 8 ** (1/3)'
But this is a "feature", not a bug (*cough*) because the 1/3 is considered integer math and evaluates to 0, leaving you with 8 to the 0th power. Anything raised to the power of 0 results in 1. So far so good.
So to force floating point math, use a floating point number:
$ ruby -e 'puts 8 ** (1/3.0)'
And all is good. Except
Let's take the square root of 1:
$ ruby -e 'puts 1 ** (1/2.0)'
Now let's take the square root of -1:
$ ruby -e 'puts -1 ** (1/2.0)'
Huh? The square root of -1 is imaginary (or i, if you want to be specific). What's going on here?
Yes, I know about Math.sqrt, which at least thoughtfully throws an exception rather than give an incorrect value:
$ ruby -e 'puts Math.sqrt(-1)'
-e:1:in `sqrt': Numerical argument out of domain - sqrt (Errno::EDOM)