summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/cmath.rb34
-rw-r--r--lib/complex.rb6
2 files changed, 23 insertions, 17 deletions
diff --git a/lib/cmath.rb b/lib/cmath.rb
index 158da4175..55995879e 100644
--- a/lib/cmath.rb
+++ b/lib/cmath.rb
@@ -25,7 +25,7 @@ module CMath
alias atanh! atanh
def exp(z)
- if Complex.generic?(z)
+ if z.scalar?
exp!(z)
else
Complex(exp!(z.real) * cos!(z.image),
@@ -35,7 +35,7 @@ module CMath
def log(*args)
z, b = args
- if Complex.generic?(z) and z >= 0 and (b.nil? or b >= 0)
+ if z.scalar? and z >= 0 and (b.nil? or b >= 0)
log!(*args)
else
r, theta = z.polar
@@ -48,7 +48,7 @@ module CMath
end
def log10(z)
- if Complex.generic?(z)
+ if z.scalar?
log10!(z)
else
log(z) / log!(10)
@@ -56,7 +56,7 @@ module CMath
end
def sqrt(z)
- if Complex.generic?(z)
+ if z.scalar?
if z >= 0
sqrt!(z)
else
@@ -74,7 +74,7 @@ module CMath
end
def sin(z)
- if Complex.generic?(z)
+ if z.scalar?
sin!(z)
else
Complex(sin!(z.real) * cosh!(z.image),
@@ -83,7 +83,7 @@ module CMath
end
def cos(z)
- if Complex.generic?(z)
+ if z.scalar?
cos!(z)
else
Complex(cos!(z.real) * cosh!(z.image),
@@ -92,7 +92,7 @@ module CMath
end
def tan(z)
- if Complex.generic?(z)
+ if z.scalar?
tan!(z)
else
sin(z)/cos(z)
@@ -100,7 +100,7 @@ module CMath
end
def sinh(z)
- if Complex.generic?(z)
+ if z.scalar?
sinh!(z)
else
Complex(sinh!(z.real) * cos!(z.image),
@@ -109,7 +109,7 @@ module CMath
end
def cosh(z)
- if Complex.generic?(z)
+ if z.scalar?
cosh!(z)
else
Complex(cosh!(z.real) * cos!(z.image),
@@ -118,7 +118,7 @@ module CMath
end
def tanh(z)
- if Complex.generic?(z)
+ if z.scalar?
tanh!(z)
else
sinh(z) / cosh(z)
@@ -126,7 +126,7 @@ module CMath
end
def asin(z)
- if Complex.generic?(z) and z >= -1 and z <= 1
+ if z.scalar? and z >= -1 and z <= 1
asin!(z)
else
-1.0.im * log(1.0.im * z + sqrt(1.0 - z * z))
@@ -134,7 +134,7 @@ module CMath
end
def acos(z)
- if Complex.generic?(z) and z >= -1 and z <= 1
+ if z.scalar? and z >= -1 and z <= 1
acos!(z)
else
-1.0.im * log(z + 1.0.im * sqrt(1.0 - z * z))
@@ -142,7 +142,7 @@ module CMath
end
def atan(z)
- if Complex.generic?(z)
+ if z.scalar?
atan!(z)
else
1.0.im * log((1.0.im + z) / (1.0.im - z)) / 2.0
@@ -150,7 +150,7 @@ module CMath
end
def atan2(y,x)
- if Complex.generic?(y) and Complex.generic?(x)
+ if y.scalar? and x.scalar?
atan2!(y,x)
else
-1.0.im * log((x + 1.0.im * y) / sqrt(x * x + y * y))
@@ -158,7 +158,7 @@ module CMath
end
def acosh(z)
- if Complex.generic?(z) and z >= 1
+ if z.scalar? and z >= 1
acosh!(z)
else
log(z + sqrt(z * z - 1.0))
@@ -166,7 +166,7 @@ module CMath
end
def asinh(z)
- if Complex.generic?(z)
+ if z.scalar?
asinh!(z)
else
log(z + sqrt(1.0 + z * z))
@@ -174,7 +174,7 @@ module CMath
end
def atanh(z)
- if Complex.generic?(z) and z >= -1 and z <= 1
+ if z.scalar? and z >= -1 and z <= 1
atanh!(z)
else
log((1.0 + z) / (1.0 - z)) / 2.0
diff --git a/lib/complex.rb b/lib/complex.rb
index 0e88dd5f4..1845f30b1 100644
--- a/lib/complex.rb
+++ b/lib/complex.rb
@@ -2,3 +2,9 @@ require 'cmath'
Object.instance_eval{remove_const :Math}
Math = CMath
+
+def Complex.generic? (other)
+ other.kind_of?(Integer) ||
+ other.kind_of?(Float) ||
+ other.kind_of?(Rational)
+end