Class Complex
- All Implemented Interfaces:
Serializable
,FieldElement<Complex>
Implementations of arithmetic operations handle NaN
and
infinite values according to the rules for Double
arithmetic, applying definitional formulas and returning NaN
or
infinite values in real or imaginary parts as these arise in computation.
See individual method javadocs for details.
equals(java.lang.Object)
identifies all values with NaN
in either real
or imaginary part - e.g.,
1 + NaNi == NaN + i == NaN + NaNi.
implements Serializable since 2.0- Version:
- $Revision: 990655 $ $Date: 2010-08-29 23:49:40 +0200 (dim. 29 août 2010) $
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Complex
The square root of -1.static final Complex
A complex number representing "+INF + INFi"static final Complex
A complex number representing "NaN + NaNi"static final Complex
A complex number representing "1.0 + 0.0i"static final Complex
A complex number representing "0.0 + 0.0i" -
Constructor Summary
ConstructorsConstructorDescriptionComplex
(double real, double imaginary) Create a complex number given the real and imaginary parts. -
Method Summary
Modifier and TypeMethodDescriptiondouble
abs()
Return the absolute value of this complex number.acos()
Compute the inverse cosine of this complex number.Return the sum of this complex number and the given complex number.asin()
Compute the inverse sine of this complex number.atan()
Compute the inverse tangent of this complex number.Return the conjugate of this complex number.cos()
Compute the cosine of this complex number.cosh()
Compute the hyperbolic cosine of this complex number.protected Complex
createComplex
(double realPart, double imaginaryPart) Create a complex number given the real and imaginary parts.Return the quotient of this complex number and the given complex number.boolean
Test for the equality of two Complex objects.exp()
Compute the exponential function of this complex number.double
Compute the argument of this complex number.getField()
Get theField
to which the instance belongs.double
Access the imaginary part.double
getReal()
Access the real part.int
hashCode()
Get a hashCode for the complex number.boolean
Returns true if either the real or imaginary part of this complex number takes an infinite value (eitherDouble.POSITIVE_INFINITY
orDouble.NEGATIVE_INFINITY
) and neither part isNaN
.boolean
isNaN()
Returns true if either or both parts of this complex number is NaN; false otherwiselog()
Compute the natural logarithm of this complex number.multiply
(double rhs) Return the product of this complex number and the given scalar number.Return the product of this complex number and the given complex number.negate()
Return the additive inverse of this complex number.nthRoot
(int n) Computes the n-th roots of this complex number.Returns of value of this complex number raised to the power ofx
.protected final Object
Resolve the transient fields in a deserialized Complex Object.sin()
Compute the sine of this complex number.sinh()
Compute the hyperbolic sine of this complex number.sqrt()
Compute the square root of this complex number.sqrt1z()
Compute the square root of 1 -this
2 for this complex number.Return the difference between this complex number and the given complex number.tan()
Compute the tangent of this complex number.tanh()
Compute the hyperbolic tangent of this complex number.
-
Field Details
-
I
The square root of -1. A number representing "0.0 + 1.0i" -
NaN
A complex number representing "NaN + NaNi" -
INF
A complex number representing "+INF + INFi" -
ONE
A complex number representing "1.0 + 0.0i" -
ZERO
A complex number representing "0.0 + 0.0i"
-
-
Constructor Details
-
Complex
public Complex(double real, double imaginary) Create a complex number given the real and imaginary parts.- Parameters:
real
- the real partimaginary
- the imaginary part
-
-
Method Details
-
abs
public double abs()Return the absolute value of this complex number.Returns
NaN
if either real or imaginary part isNaN
andDouble.POSITIVE_INFINITY
if neither part isNaN
, but at least one part takes an infinite value.- Returns:
- the absolute value
-
add
Return the sum of this complex number and the given complex number.Uses the definitional formula
(a + bi) + (c + di) = (a+c) + (b+d)i
If either this or
rhs
has a NaN value in either part,NaN
is returned; otherwise Inifinite and NaN values are returned in the parts of the result according to the rules forDouble
arithmetic.- Specified by:
add
in interfaceFieldElement<Complex>
- Parameters:
rhs
- the other complex number- Returns:
- the complex number sum
- Throws:
NullPointerException
- ifrhs
is null
-
conjugate
Return the conjugate of this complex number. The conjugate of "A + Bi" is "A - Bi".NaN
is returned if either the real or imaginary part of this Complex number equalsDouble.NaN
.If the imaginary part is infinite, and the real part is not NaN, the returned value has infinite imaginary part of the opposite sign - e.g. the conjugate of
1 + POSITIVE_INFINITY i
is1 - NEGATIVE_INFINITY i
- Returns:
- the conjugate of this Complex object
-
divide
Return the quotient of this complex number and the given complex number.Implements the definitional formula
but uses prescaling of operands to limit the effects of overflows and underflows in the computation.a + bi ac + bd + (bc - ad)i ----------- = ------------------------- c + di c2 + d2
Infinite and NaN values are handled / returned according to the following rules, applied in the order presented:
- If either this or
rhs
has a NaN value in either part,NaN
is returned. - If
rhs
equalsZERO
,NaN
is returned. - If this and
rhs
are both infinite,NaN
is returned. - If this is finite (i.e., has no infinite or NaN parts) and
rhs
is infinite (one or both parts infinite),ZERO
is returned. - If this is infinite and
rhs
is finite, NaN values are returned in the parts of the result if theDouble
rules applied to the definitional formula force NaN results.
- Specified by:
divide
in interfaceFieldElement<Complex>
- Parameters:
rhs
- the other complex number- Returns:
- the complex number quotient
- Throws:
NullPointerException
- ifrhs
is null
- If either this or
-
equals
Test for the equality of two Complex objects.If both the real and imaginary parts of two Complex numbers are exactly the same, and neither is
Double.NaN
, the two Complex objects are considered to be equal.All
NaN
values are considered to be equal - i.e, if either (or both) real and imaginary parts of the complex number are equal toDouble.NaN
, the complex number is equal toComplex.NaN
. -
hashCode
public int hashCode()Get a hashCode for the complex number.All NaN values have the same hash code.
-
getImaginary
public double getImaginary()Access the imaginary part.- Returns:
- the imaginary part
-
getReal
public double getReal()Access the real part.- Returns:
- the real part
-
isNaN
public boolean isNaN()Returns true if either or both parts of this complex number is NaN; false otherwise- Returns:
- true if either or both parts of this complex number is NaN; false otherwise
-
isInfinite
public boolean isInfinite()Returns true if either the real or imaginary part of this complex number takes an infinite value (eitherDouble.POSITIVE_INFINITY
orDouble.NEGATIVE_INFINITY
) and neither part isNaN
.- Returns:
- true if one or both parts of this complex number are infinite
and neither part is
NaN
-
multiply
Return the product of this complex number and the given complex number.Implements preliminary checks for NaN and infinity followed by the definitional formula:
(a + bi)(c + di) = (ac - bd) + (ad + bc)i
Returns
ReturnsNaN
if either this orrhs
has one or more NaN parts.INF
if neither this norrhs
has one or more NaN parts and if either this orrhs
has one or more infinite parts (same result is returned regardless of the sign of the components).Returns finite values in components of the result per the definitional formula in all remaining cases.
- Specified by:
multiply
in interfaceFieldElement<Complex>
- Parameters:
rhs
- the other complex number- Returns:
- the complex number product
- Throws:
NullPointerException
- ifrhs
is null
-
multiply
Return the product of this complex number and the given scalar number.Implements preliminary checks for NaN and infinity followed by the definitional formula:
c(a + bi) = (ca) + (cb)i
Returns
ReturnsNaN
if either this orrhs
has one or more NaN parts.INF
if neither this norrhs
has one or more NaN parts and if either this orrhs
has one or more infinite parts (same result is returned regardless of the sign of the components).Returns finite values in components of the result per the definitional formula in all remaining cases.
- Parameters:
rhs
- the scalar number- Returns:
- the complex number product
-
negate
Return the additive inverse of this complex number.Returns
Complex.NaN
if either real or imaginary part of this Complex number equalsDouble.NaN
.- Returns:
- the negation of this complex number
-
subtract
Return the difference between this complex number and the given complex number.Uses the definitional formula
(a + bi) - (c + di) = (a-c) + (b-d)i
If either this or
rhs
has a NaN value in either part,NaN
is returned; otherwise inifinite and NaN values are returned in the parts of the result according to the rules forDouble
arithmetic.- Specified by:
subtract
in interfaceFieldElement<Complex>
- Parameters:
rhs
- the other complex number- Returns:
- the complex number difference
- Throws:
NullPointerException
- ifrhs
is null
-
acos
Compute the inverse cosine of this complex number.Implements the formula:
acos(z) = -i (log(z + i (sqrt(1 - z2))))
Returns
NaN
if either real or imaginary part of the input argument isNaN
or infinite.- Returns:
- the inverse cosine of this complex number
- Since:
- 1.2
-
asin
Compute the inverse sine of this complex number.Implements the formula:
asin(z) = -i (log(sqrt(1 - z2) + iz))
Returns
NaN
if either real or imaginary part of the input argument isNaN
or infinite.- Returns:
- the inverse sine of this complex number.
- Since:
- 1.2
-
atan
Compute the inverse tangent of this complex number.Implements the formula:
atan(z) = (i/2) log((i + z)/(i - z))
Returns
NaN
if either real or imaginary part of the input argument isNaN
or infinite.- Returns:
- the inverse tangent of this complex number
- Since:
- 1.2
-
cos
Compute the cosine of this complex number.Implements the formula:
cos(a + bi) = cos(a)cosh(b) - sin(a)sinh(b)i
Math.sin(double)
,Math.cos(double)
,MathUtils.cosh(double)
andMathUtils.sinh(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
cos(1 ± INFINITY i) = 1 ∓ INFINITY i cos(±INFINITY + i) = NaN + NaN i cos(±INFINITY ± INFINITY i) = NaN + NaN i
- Returns:
- the cosine of this complex number
- Since:
- 1.2
-
cosh
Compute the hyperbolic cosine of this complex number.Implements the formula:
cosh(a + bi) = cosh(a)cos(b) + sinh(a)sin(b)i
Math.sin(double)
,Math.cos(double)
,MathUtils.cosh(double)
andMathUtils.sinh(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
cosh(1 ± INFINITY i) = NaN + NaN i cosh(±INFINITY + i) = INFINITY ± INFINITY i cosh(±INFINITY ± INFINITY i) = NaN + NaN i
- Returns:
- the hyperbolic cosine of this complex number.
- Since:
- 1.2
-
exp
Compute the exponential function of this complex number.Implements the formula:
exp(a + bi) = exp(a)cos(b) + exp(a)sin(b)i
Math.exp(double)
,Math.cos(double)
, andMath.sin(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
exp(1 ± INFINITY i) = NaN + NaN i exp(INFINITY + i) = INFINITY + INFINITY i exp(-INFINITY + i) = 0 + 0i exp(±INFINITY ± INFINITY i) = NaN + NaN i
- Returns:
- e
this
- Since:
- 1.2
-
log
Compute the natural logarithm of this complex number.Implements the formula:
log(a + bi) = ln(|a + bi|) + arg(a + bi)i
Math.log(double)
,|a + bi|
is the modulus,abs()
, andarg(a + bi) =
Math.atan2(double, double)
(b, a)Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite (or critical) values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
log(1 ± INFINITY i) = INFINITY ± (π/2)i log(INFINITY + i) = INFINITY + 0i log(-INFINITY + i) = INFINITY + πi log(INFINITY ± INFINITY i) = INFINITY ± (π/4)i log(-INFINITY ± INFINITY i) = INFINITY ± (3π/4)i log(0 + 0i) = -INFINITY + 0i
- Returns:
- ln of this complex number.
- Since:
- 1.2
-
pow
Returns of value of this complex number raised to the power ofx
.Implements the formula:
yx = exp(x·log(y))
exp
andlog
areexp()
andlog()
, respectively.Returns
NaN
if either real or imaginary part of the input argument isNaN
or infinite, or ify
equalsZERO
.- Parameters:
x
- the exponent.- Returns:
this
x
- Throws:
NullPointerException
- if x is null- Since:
- 1.2
-
sin
Compute the sine of this complex number.Implements the formula:
sin(a + bi) = sin(a)cosh(b) - cos(a)sinh(b)i
Math.sin(double)
,Math.cos(double)
,MathUtils.cosh(double)
andMathUtils.sinh(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
sin(1 ± INFINITY i) = 1 ± INFINITY i sin(±INFINITY + i) = NaN + NaN i sin(±INFINITY ± INFINITY i) = NaN + NaN i
- Returns:
- the sine of this complex number.
- Since:
- 1.2
-
sinh
Compute the hyperbolic sine of this complex number.Implements the formula:
sinh(a + bi) = sinh(a)cos(b)) + cosh(a)sin(b)i
Math.sin(double)
,Math.cos(double)
,MathUtils.cosh(double)
andMathUtils.sinh(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
sinh(1 ± INFINITY i) = NaN + NaN i sinh(±INFINITY + i) = ± INFINITY + INFINITY i sinh(±INFINITY ± INFINITY i) = NaN + NaN i
- Returns:
- the hyperbolic sine of this complex number
- Since:
- 1.2
-
sqrt
Compute the square root of this complex number.Implements the following algorithm to compute
sqrt(a + bi)
:- Let
t = sqrt((|a| + |a + bi|) / 2)
if
a ≥ 0
returnt + (b/2t)i
else return|b|/2t + sign(b)t i
|a| =
Math.abs(int)
(a)|a + bi| =
abs()
(a + bi)sign(b) =
MathUtils.indicator(byte)
(b)
Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
sqrt(1 ± INFINITY i) = INFINITY + NaN i sqrt(INFINITY + i) = INFINITY + 0i sqrt(-INFINITY + i) = 0 + INFINITY i sqrt(INFINITY ± INFINITY i) = INFINITY + NaN i sqrt(-INFINITY ± INFINITY i) = NaN ± INFINITY i
- Returns:
- the square root of this complex number
- Since:
- 1.2
- Let
-
sqrt1z
Compute the square root of 1 -this
2 for this complex number.Computes the result directly as
sqrt(Complex.ONE.subtract(z.multiply(z)))
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
- Returns:
- the square root of 1 -
this
2 - Since:
- 1.2
-
tan
Compute the tangent of this complex number.Implements the formula:
tan(a + bi) = sin(2a)/(cos(2a)+cosh(2b)) + [sinh(2b)/(cos(2a)+cosh(2b))]i
Math.sin(double)
,Math.cos(double)
,MathUtils.cosh(double)
andMathUtils.sinh(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite (or critical) values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
tan(1 ± INFINITY i) = 0 + NaN i tan(±INFINITY + i) = NaN + NaN i tan(±INFINITY ± INFINITY i) = NaN + NaN i tan(±π/2 + 0 i) = ±INFINITY + NaN i
- Returns:
- the tangent of this complex number
- Since:
- 1.2
-
tanh
Compute the hyperbolic tangent of this complex number.Implements the formula:
tan(a + bi) = sinh(2a)/(cosh(2a)+cos(2b)) + [sin(2b)/(cosh(2a)+cos(2b))]i
Math.sin(double)
,Math.cos(double)
,MathUtils.cosh(double)
andMathUtils.sinh(double)
.Returns
NaN
if either real or imaginary part of the input argument isNaN
.Infinite values in real or imaginary parts of the input may result in infinite or NaN values returned in parts of the result.
Examples:
tanh(1 ± INFINITY i) = NaN + NaN i tanh(±INFINITY + i) = NaN + 0 i tanh(±INFINITY ± INFINITY i) = NaN + NaN i tanh(0 + (π/2)i) = NaN + INFINITY i
- Returns:
- the hyperbolic tangent of this complex number
- Since:
- 1.2
-
getArgument
public double getArgument()Compute the argument of this complex number.
The argument is the angle phi between the positive real axis and the point representing this number in the complex plane. The value returned is between -PI (not inclusive) and PI (inclusive), with negative values returned for numbers with negative imaginary parts.
If either real or imaginary part (or both) is NaN, NaN is returned. Infinite parts are handled as java.Math.atan2 handles them, essentially treating finite parts as zero in the presence of an infinite coordinate and returning a multiple of pi/4 depending on the signs of the infinite parts. See the javadoc for java.Math.atan2 for full details.
- Returns:
- the argument of this complex number
-
nthRoot
Computes the n-th roots of this complex number.
The nth roots are defined by the formula:
zk = abs 1/n (cos(phi + 2πk/n) + i (sin(phi + 2πk/n))
k=0, 1, ..., n-1
, whereabs
andphi
are respectively themodulus
andargument
of this complex number.If one or both parts of this complex number is NaN, a list with just one element,
NaN
is returned.if neither part is NaN, but at least one part is infinite, the result is a one-element list containing
INF
.- Parameters:
n
- degree of root- Returns:
- List
all nth roots of this complex number - Throws:
IllegalArgumentException
- if parameter n is less than or equal to 0- Since:
- 2.0
-
createComplex
Create a complex number given the real and imaginary parts.- Parameters:
realPart
- the real partimaginaryPart
- the imaginary part- Returns:
- a new complex number instance
- Since:
- 1.2
-
readResolve
Resolve the transient fields in a deserialized Complex Object.
Subclasses will need to override
createComplex(double, double)
to deserialize properly- Returns:
- A Complex instance with all fields resolved.
- Since:
- 2.0
-
getField
Get theField
to which the instance belongs.- Specified by:
getField
in interfaceFieldElement<Complex>
- Returns:
Field
to which the instance belongs
-