PHP 8.2.31
Preview: cmath.rb Size: 7.22 KB
//proc/thread-self/root/opt/alt/ruby19/lib64/ruby/1.9.1/cmath.rb

##
# = 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

Directory Contents

Dirs: 30 × Files: 78

Name Size Perms Modified Actions
cgi DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
date DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
digest DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
dl DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
drb DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
fiddle DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
irb DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
json DIR
- drwxr-xr-x 2024-03-03 22:48:09
Edit Download
matrix DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
net DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
openssl DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
optparse DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
psych DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
racc DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
rake DIR
- drwxr-xr-x 2024-03-03 22:50:37
Edit Download
rbconfig DIR
- drwxr-xr-x 2024-03-03 22:48:12
Edit Download
rdoc DIR
- drwxr-xr-x 2024-03-03 22:48:11
Edit Download
rexml DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
rinda DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
ripper DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
rss DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
rubygems DIR
- drwxr-xr-x 2024-03-03 22:48:12
Edit Download
shell DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
syck DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
test DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
uri DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
webrick DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
- drwxr-xr-x 2024-03-03 22:48:09
Edit Download
xmlrpc DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
yaml DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
2.57 KB lrw-r--r-- 2011-05-18 21:19:18
Edit Download
2.63 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
18.00 KB lrw-r--r-- 2011-06-28 06:09:46
Edit Download
9.30 KB lrw-r--r-- 2011-05-16 21:21:35
Edit Download
7.22 KB lrw-r--r-- 2011-07-30 14:53:14
Edit Download
380 B lrw-r--r-- 2009-08-16 15:34:35
Edit Download
82.66 KB lrw-r--r-- 2011-07-21 21:40:21
Edit Download
946 B lrw-r--r-- 2011-05-21 12:25:03
Edit Download
23.23 KB lrw-r--r-- 2011-06-28 11:45:50
Edit Download
9.74 KB lrw-r--r-- 2011-07-27 19:56:28
Edit Download
2.24 KB lrw-r--r-- 2011-05-16 20:52:55
Edit Download
176 B lrw-r--r-- 2010-06-12 15:28:47
Edit Download
19 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
3.80 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
5.59 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
25.72 KB lrw-r--r-- 2012-12-13 05:24:26
Edit Download
1.33 KB lrw-r--r-- 2011-08-26 23:54:49
Edit Download
928 B lrw-r--r-- 2011-08-16 00:51:58
Edit Download
45.32 KB lrw-r--r-- 2012-02-25 08:11:07
Edit Download
2.03 KB lrw-r--r-- 2011-05-18 21:19:18
Edit Download
7.64 KB lrw-r--r-- 2011-05-22 02:14:57
Edit Download
15.38 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
8.83 KB lrw-r--r-- 2013-10-31 14:40:55
Edit Download
24.92 KB lrw-r--r-- 2013-04-11 02:31:05
Edit Download
8.34 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
1.74 KB lrw-r--r-- 2011-08-30 02:25:32
Edit Download
5.74 KB lrw-r--r-- 2010-12-07 11:47:39
Edit Download
20.85 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
6.52 KB lrw-r--r-- 2011-08-26 23:54:49
Edit Download
47.65 KB lrw-r--r-- 2011-07-09 19:11:06
Edit Download
68.90 KB lrw-r--r-- 2014-02-06 05:20:52
Edit Download
6.94 KB lrw-r--r-- 2011-06-17 22:33:54
Edit Download
1.61 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
5.69 KB lrw-r--r-- 2011-05-16 21:53:12
Edit Download
25.84 KB lrw-r--r-- 2014-02-24 03:43:27
Edit Download
20.64 KB lrw-r--r-- 2011-05-18 21:19:18
Edit Download
547 B lrw-r--r-- 2011-07-25 06:38:44
Edit Download
51.13 KB lrw-r--r-- 2014-02-14 04:52:03
Edit Download
6.49 KB lrw-r--r-- 2012-02-24 14:49:51
Edit Download
14.21 KB lrw-r--r-- 2011-08-26 23:54:49
Edit Download
13.31 KB lrw-r--r-- 2010-08-01 14:09:40
Edit Download
9.63 KB lrw-r--r-- 2011-08-02 15:25:59
Edit Download
13.98 KB lrw-r--r-- 2011-06-01 00:21:46
Edit Download
205 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
1.59 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
15.81 KB lrw-r--r-- 2011-10-10 23:14:17
Edit Download
9.82 KB lrw-r--r-- 2012-08-07 20:50:05
Edit Download
2.02 KB lrw-r--r-- 2011-06-29 03:09:34
Edit Download
308 B lrw-r--r-- 2009-09-24 00:42:23
Edit Download
4.29 KB lrw-r--r-- 2013-02-06 08:00:49
Edit Download
1.74 KB lrw-r--r-- 2010-10-29 22:02:39
Edit Download
59.91 KB lrw-r--r-- 2014-02-14 06:56:54
Edit Download
91 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
2.84 KB lrw-r--r-- 2011-05-11 10:22:16
Edit Download
34.13 KB lrw-r--r-- 2013-12-22 04:38:28
Edit Download
23.53 KB lrw-r--r-- 2011-05-20 12:22:26
Edit Download
8.46 KB lrw-r--r-- 2012-05-07 11:25:45
Edit Download
29.91 KB lrw-r--r-- 2012-02-10 08:28:48
Edit Download
5.90 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
3.88 KB lrw-r--r-- 2012-02-12 07:51:05
Edit Download
4.02 KB lrw-r--r-- 2011-05-18 14:09:38
Edit Download
23.22 KB lrw-r--r-- 2014-01-30 12:04:22
Edit Download
13.91 KB lrw-r--r-- 2010-07-19 04:54:06
Edit Download
6.87 KB lrw-r--r-- 2011-06-29 03:09:34
Edit Download
10.42 KB lrw-r--r-- 2013-10-31 14:44:40
Edit Download
6.59 KB lrw-r--r-- 2014-02-14 03:48:42
Edit Download
3.38 KB lrw-r--r-- 2011-06-29 03:09:34
Edit Download
17.03 KB lrw-r--r-- 2013-10-31 14:06:50
Edit Download
3.26 KB lrw-r--r-- 2013-04-02 04:09:07
Edit Download
3.72 KB lrw-r--r-- 2011-05-18 21:19:18
Edit Download
6.63 KB lrw-r--r-- 2011-06-29 13:19:59
Edit Download
6.79 KB lrw-r--r-- 2009-03-06 04:23:05
Edit Download
268 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
8.32 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
3.07 KB lrw-r--r-- 2011-05-13 20:03:21
Edit Download
2.29 KB lrw-r--r-- 2011-08-26 23:54:49
Edit Download
6.80 KB lrw-r--r-- 2011-05-10 23:37:43
Edit Download
2.58 KB lrw-r--r-- 2013-05-29 12:00:57
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).