Feature #10974 » deprecate_CMath_methods.patch
| lib/cmath.rb | ||
|---|---|---|
|
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
|
||
|
%w[
|
||
|
exp
|
||
|
log
|
||
|
log2
|
||
|
log10
|
||
|
sqrt
|
||
|
cbrt
|
||
|
sin
|
||
|
cos
|
||
|
tan
|
||
|
sinh
|
||
|
cosh
|
||
|
tanh
|
||
|
asin
|
||
|
acos
|
||
|
atan
|
||
|
atan2
|
||
|
asinh
|
||
|
acosh
|
||
|
atanh
|
||
|
].each do |meth|
|
||
|
define_method(meth + '!') do |*args, &block|
|
||
|
warn("CMath##{meth}! is deprecated; use CMath##{meth} or Math##{meth}") if $VERBOSE
|
||
|
Math.send(meth, *args, &block)
|
||
|
end
|
||
|
end
|
||
|
##
|
||
|
# Math::E raised to the +z+ power
|
||
| ... | ... | |
|
def exp(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
exp!(z)
|
||
|
Math.exp(z)
|
||
|
else
|
||
|
ere = exp!(z.real)
|
||
|
Complex(ere * cos!(z.imag),
|
||
|
ere * sin!(z.imag))
|
||
|
ere = Math.exp(z.real)
|
||
|
Complex(ere * Math.cos(z.imag),
|
||
|
ere * Math.sin(z.imag))
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def log(z, b=::Math::E)
|
||
|
begin
|
||
|
if z.real? && z >= 0 && b >= 0
|
||
|
log!(z, b)
|
||
|
Math.log(z, b)
|
||
|
else
|
||
|
Complex(log!(z.abs), z.arg) / log(b)
|
||
|
Complex(Math.log(z.abs), z.arg) / log(b)
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def log2(z)
|
||
|
begin
|
||
|
if z.real? and z >= 0
|
||
|
log2!(z)
|
||
|
Math.log2(z)
|
||
|
else
|
||
|
log(z) / log!(2)
|
||
|
log(z) / Math.log(2)
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def log10(z)
|
||
|
begin
|
||
|
if z.real? and z >= 0
|
||
|
log10!(z)
|
||
|
Math.log10(z)
|
||
|
else
|
||
|
log(z) / log!(10)
|
||
|
log(z) / Math.log(10)
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
begin
|
||
|
if z.real?
|
||
|
if z < 0
|
||
|
Complex(0, sqrt!(-z))
|
||
|
Complex(0, Math.sqrt(-z))
|
||
|
else
|
||
|
sqrt!(z)
|
||
|
Math.sqrt(z)
|
||
|
end
|
||
|
else
|
||
|
if z.imag < 0 ||
|
||
| ... | ... | |
|
else
|
||
|
r = z.abs
|
||
|
x = z.real
|
||
|
Complex(sqrt!((r + x) / 2.0), sqrt!((r - x) / 2.0))
|
||
|
Complex(Math.sqrt((r + x) / 2.0), Math.sqrt((r - x) / 2.0))
|
||
|
end
|
||
|
end
|
||
|
rescue NoMethodError
|
||
| ... | ... | |
|
def sin(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
sin!(z)
|
||
|
Math.sin(z)
|
||
|
else
|
||
|
Complex(sin!(z.real) * cosh!(z.imag),
|
||
|
cos!(z.real) * sinh!(z.imag))
|
||
|
Complex(Math.sin(z.real) * Math.cosh(z.imag),
|
||
|
Math.cos(z.real) * Math.sinh(z.imag))
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def cos(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
cos!(z)
|
||
|
Math.cos(z)
|
||
|
else
|
||
|
Complex(cos!(z.real) * cosh!(z.imag),
|
||
|
-sin!(z.real) * sinh!(z.imag))
|
||
|
Complex(Math.cos(z.real) * Math.cosh(z.imag),
|
||
|
-Math.sin(z.real) * Math.sinh(z.imag))
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def tan(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
tan!(z)
|
||
|
Math.tan(z)
|
||
|
else
|
||
|
sin(z) / cos(z)
|
||
|
end
|
||
| ... | ... | |
|
def sinh(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
sinh!(z)
|
||
|
Math.sinh(z)
|
||
|
else
|
||
|
Complex(sinh!(z.real) * cos!(z.imag),
|
||
|
cosh!(z.real) * sin!(z.imag))
|
||
|
Complex(Math.sinh(z.real) * Math.cos(z.imag),
|
||
|
Math.cosh(z.real) * Math.sin(z.imag))
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def cosh(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
cosh!(z)
|
||
|
Math.cosh(z)
|
||
|
else
|
||
|
Complex(cosh!(z.real) * cos!(z.imag),
|
||
|
sinh!(z.real) * sin!(z.imag))
|
||
|
Complex(Math.cosh(z.real) * Math.cos(z.imag),
|
||
|
Math.sinh(z.real) * Math.sin(z.imag))
|
||
|
end
|
||
|
rescue NoMethodError
|
||
|
handle_no_method_error
|
||
| ... | ... | |
|
def tanh(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
tanh!(z)
|
||
|
Math.tanh(z)
|
||
|
else
|
||
|
sinh(z) / cosh(z)
|
||
|
end
|
||
| ... | ... | |
|
def asin(z)
|
||
|
begin
|
||
|
if z.real? and z >= -1 and z <= 1
|
||
|
asin!(z)
|
||
|
Math.asin(z)
|
||
|
else
|
||
|
(-1.0).i * log(1.0.i * z + sqrt(1.0 - z * z))
|
||
|
end
|
||
| ... | ... | |
|
def acos(z)
|
||
|
begin
|
||
|
if z.real? and z >= -1 and z <= 1
|
||
|
acos!(z)
|
||
|
Math.acos(z)
|
||
|
else
|
||
|
(-1.0).i * log(z + 1.0.i * sqrt(1.0 - z * z))
|
||
|
end
|
||
| ... | ... | |
|
def atan(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
atan!(z)
|
||
|
Math.atan(z)
|
||
|
else
|
||
|
1.0.i * log((1.0.i + z) / (1.0.i - z)) / 2.0
|
||
|
end
|
||
| ... | ... | |
|
def atan2(y,x)
|
||
|
begin
|
||
|
if y.real? and x.real?
|
||
|
atan2!(y,x)
|
||
|
Math.atan2(y,x)
|
||
|
else
|
||
|
(-1.0).i * log((x + 1.0.i * y) / sqrt(x * x + y * y))
|
||
|
end
|
||
| ... | ... | |
|
def asinh(z)
|
||
|
begin
|
||
|
if z.real?
|
||
|
asinh!(z)
|
||
|
Math.asinh(z)
|
||
|
else
|
||
|
log(z + sqrt(1.0 + z * z))
|
||
|
end
|
||
| ... | ... | |
|
def acosh(z)
|
||
|
begin
|
||
|
if z.real? and z >= 1
|
||
|
acosh!(z)
|
||
|
Math.acosh(z)
|
||
|
else
|
||
|
log(z + sqrt(z * z - 1.0))
|
||
|
end
|
||
| ... | ... | |
|
def atanh(z)
|
||
|
begin
|
||
|
if z.real? and z >= -1 and z <= 1
|
||
|
atanh!(z)
|
||
|
Math.atanh(z)
|
||
|
else
|
||
|
log((1.0 + z) / (1.0 - z)) / 2.0
|
||
|
end
|
||
|
-
|
||
- « Previous
- 1
- 2
- Next »