summaryrefslogtreecommitdiff
path: root/ruby_1_9_3/lib/cmath.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_9_3/lib/cmath.rb')
-rw-r--r--ruby_1_9_3/lib/cmath.rb402
1 files changed, 0 insertions, 402 deletions
diff --git a/ruby_1_9_3/lib/cmath.rb b/ruby_1_9_3/lib/cmath.rb
deleted file mode 100644
index d613a3f6f9..0000000000
--- a/ruby_1_9_3/lib/cmath.rb
+++ /dev/null
@@ -1,402 +0,0 @@
-##
-# = CMath
-#
-# CMath is a library that provides trigonometric and transcendental
-# functions for complex numbers.
-#
-# == Usage
-#
-# To start using this library, simply:
-#
-# require "cmath"
-#
-# Square root of a negative number is a complex number.
-#
-# CMath.sqrt(-9) #=> 0+3.0i
-#
-
-module CMath
-
- include Math
-
- alias exp! exp
- alias log! log
- alias log2! log2
- alias log10! log10
- alias sqrt! sqrt
- alias cbrt! cbrt
-
- alias sin! sin
- alias cos! cos
- alias tan! tan
-
- alias sinh! sinh
- alias cosh! cosh
- alias tanh! tanh
-
- alias asin! asin
- alias acos! acos
- alias atan! atan
- alias atan2! atan2
-
- alias asinh! asinh
- alias acosh! acosh
- alias atanh! atanh
-
- ##
- # Math::E raised to the +z+ power
- #
- # exp(Complex(0,0)) #=> 1.0+0.0i
- # exp(Complex(0,PI)) #=> -1.0+1.2246467991473532e-16i
- # exp(Complex(0,PI/2.0)) #=> 6.123233995736766e-17+1.0i
- def exp(z)
- begin
- if z.real?
- exp!(z)
- else
- ere = exp!(z.real)
- Complex(ere * cos!(z.imag),
- ere * sin!(z.imag))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # Returns the natural logarithm of Complex. If a second argument is given,
- # it will be the base of logarithm.
- #
- # log(Complex(0,0)) #=> -Infinity+0.0i
- def log(*args)
- begin
- z, b = args
- unless b.nil? || b.kind_of?(Numeric)
- raise TypeError, "Numeric Number required"
- end
- if z.real? and z >= 0 and (b.nil? or b >= 0)
- log!(*args)
- else
- a = Complex(log!(z.abs), z.arg)
- if b
- a /= log(b)
- end
- a
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the base 2 logarithm of +z+
- def log2(z)
- begin
- if z.real? and z >= 0
- log2!(z)
- else
- log(z) / log!(2)
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the base 10 logarithm of +z+
- def log10(z)
- begin
- if z.real? and z >= 0
- log10!(z)
- else
- log(z) / log!(10)
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # Returns the non-negative square root of Complex.
- # sqrt(-1) #=> 0+1.0i
- # sqrt(Complex(-1,0)) #=> 0.0+1.0i
- # sqrt(Complex(0,8)) #=> 2.0+2.0i
- def sqrt(z)
- begin
- if z.real?
- if z < 0
- Complex(0, sqrt!(-z))
- else
- sqrt!(z)
- end
- else
- if z.imag < 0 ||
- (z.imag == 0 && z.imag.to_s[0] == '-')
- sqrt(z.conjugate).conjugate
- else
- r = z.abs
- x = z.real
- Complex(sqrt!((r + x) / 2.0), sqrt!((r - x) / 2.0))
- end
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the principal value of the cube root of +z+
- def cbrt(z)
- z ** (1.0/3)
- end
-
- ##
- # returns the sine of +z+, where +z+ is given in radians
- def sin(z)
- begin
- if z.real?
- sin!(z)
- else
- Complex(sin!(z.real) * cosh!(z.imag),
- cos!(z.real) * sinh!(z.imag))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the cosine of +z+, where +z+ is given in radians
- def cos(z)
- begin
- if z.real?
- cos!(z)
- else
- Complex(cos!(z.real) * cosh!(z.imag),
- -sin!(z.real) * sinh!(z.imag))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the tangent of +z+, where +z+ is given in radians
- def tan(z)
- begin
- if z.real?
- tan!(z)
- else
- sin(z) / cos(z)
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the hyperbolic sine of +z+, where +z+ is given in radians
- def sinh(z)
- begin
- if z.real?
- sinh!(z)
- else
- Complex(sinh!(z.real) * cos!(z.imag),
- cosh!(z.real) * sin!(z.imag))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the hyperbolic cosine of +z+, where +z+ is given in radians
- def cosh(z)
- begin
- if z.real?
- cosh!(z)
- else
- Complex(cosh!(z.real) * cos!(z.imag),
- sinh!(z.real) * sin!(z.imag))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the hyperbolic tangent of +z+, where +z+ is given in radians
- def tanh(z)
- begin
- if z.real?
- tanh!(z)
- else
- sinh(z) / cosh(z)
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the arc sine of +z+
- def asin(z)
- begin
- if z.real? and z >= -1 and z <= 1
- asin!(z)
- else
- (-1.0).i * log(1.0.i * z + sqrt(1.0 - z * z))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the arc cosine of +z+
- def acos(z)
- begin
- if z.real? and z >= -1 and z <= 1
- acos!(z)
- else
- (-1.0).i * log(z + 1.0.i * sqrt(1.0 - z * z))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the arc tangent of +z+
- def atan(z)
- begin
- if z.real?
- atan!(z)
- else
- 1.0.i * log((1.0.i + z) / (1.0.i - z)) / 2.0
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the arc tangent of +y+ divided by +x+ using the signs of +y+ and
- # +x+ to determine the quadrant
- def atan2(y,x)
- begin
- if y.real? and x.real?
- atan2!(y,x)
- else
- (-1.0).i * log((x + 1.0.i * y) / sqrt(x * x + y * y))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the inverse hyperbolic sine of +z+
- def asinh(z)
- begin
- if z.real?
- asinh!(z)
- else
- log(z + sqrt(1.0 + z * z))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the inverse hyperbolic cosine of +z+
- def acosh(z)
- begin
- if z.real? and z >= 1
- acosh!(z)
- else
- log(z + sqrt(z * z - 1.0))
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- ##
- # returns the inverse hyperbolic tangent of +z+
- def atanh(z)
- begin
- if z.real? and z >= -1 and z <= 1
- atanh!(z)
- else
- log((1.0 + z) / (1.0 - z)) / 2.0
- end
- rescue NoMethodError
- handle_no_method_error
- end
- end
-
- module_function :exp!
- module_function :exp
- module_function :log!
- module_function :log
- module_function :log2!
- module_function :log2
- module_function :log10!
- module_function :log10
- module_function :sqrt!
- module_function :sqrt
- module_function :cbrt!
- module_function :cbrt
-
- module_function :sin!
- module_function :sin
- module_function :cos!
- module_function :cos
- module_function :tan!
- module_function :tan
-
- module_function :sinh!
- module_function :sinh
- module_function :cosh!
- module_function :cosh
- module_function :tanh!
- module_function :tanh
-
- module_function :asin!
- module_function :asin
- module_function :acos!
- module_function :acos
- module_function :atan!
- module_function :atan
- module_function :atan2!
- module_function :atan2
-
- module_function :asinh!
- module_function :asinh
- module_function :acosh!
- module_function :acosh
- module_function :atanh!
- module_function :atanh
-
- module_function :frexp
- module_function :ldexp
- module_function :hypot
- module_function :erf
- module_function :erfc
- module_function :gamma
- module_function :lgamma
-
- private
- def handle_no_method_error # :nodoc:
- if $!.name == :real?
- raise TypeError, "Numeric Number required"
- else
- raise
- end
- end
- module_function :handle_no_method_error
-
-end
-