Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

• mathn.rb

Quicksearch

# Math

### Public Class Methods

rsqrt(a) click to toggle source
```
# File mathn.rb, line 147
def rsqrt(a)
if a.kind_of?(Float)
sqrt!(a)
elsif a.kind_of?(Rational)
rsqrt(a.numerator)/rsqrt(a.denominator)
else
src = a
max = 2 ** 32
byte_a = [src & 0xffffffff]
# ruby's bug
while (src >= max) and (src >>= 32)
byte_a.unshift src & 0xffffffff
end

main = 0
side = 0
for elm in byte_a
main = (main << 32) + elm
side <<= 16
if main * 4  < side * side
applo = main.div(side)
else
applo = ((sqrt!(side * side + 4 * main) - side)/2.0).to_i + 1
end
else
applo = sqrt!(main).to_i + 1
end

while (x = (side + applo) * applo) > main
applo -= 1
end
main -= x
side += applo * 2
end
if main == 0
else
sqrt!(a)
end
end
end
```
sqrt(a) click to toggle source
```
# File mathn.rb, line 122
def sqrt(a)
if a.kind_of?(Complex)
abs = sqrt(a.real*a.real + a.imag*a.imag)
#      if not abs.kind_of?(Rational)
#       return a**Rational(1,2)
#      end
x = sqrt((a.real + abs)/Rational(2))
y = sqrt((-a.real + abs)/Rational(2))
#      if !(x.kind_of?(Rational) and y.kind_of?(Rational))
#       return a**Rational(1,2)
#      end
if a.imag >= 0
Complex(x, y)
else
Complex(x, -y)
end
elsif a.respond_to?(:nan?) and a.nan?
a
elsif a >= 0
rsqrt(a)
else
Complex(0,rsqrt(-a))
end
end
```