NAME
src/pmc/complex.pmc - Complex Numbers PMC Class
DESCRIPTION
Complex
provides a representation of complex numbers.
It handles string parsing/generating and basic mathematical operations.
Functions
Equations used are sometimes listed. At times, multiple equations are given, but those starting with => are the ones used
static void complex_parse_string(PARROT_INTERP, FLOATVAL *re, FLOATVAL *im, STRING *value)
Parses the string in static void int_check_divide_zero(PARROT_INTERP, INTVAL value)
static void float_check_divide_zero(PARROT_INTERP, FLOATVAL value)
static void complex_check_divide_zero(PARROT_INTERP, PMC *value)
value
to produce a complex number,
represented by the real (*re
) and imaginary (*im
) parts.
Raises an exception if it cannot understand the string.
The string should be of the form a+bi
with optional spaces around +
and before i
.
You can also use j
instead of i
.
Methods
void init()
Initializes the complex number with the value 0+0i.
void init_pmc(PMC *initializer)
Initializes the complex number with the specified initializer.
The initializer can be a string PMC or a numeric array with (real,
imag)
PMC *clone()
Creates an identical copy of the complex number.
void freeze(PMC *visit)
void thaw(PMC *visit)
Serialize/deserialize this object for bytecode.
INTVAL get_integer()
Returns the modulus of the complex number as an integer.
FLOATVAL get_number()
Returns the modulus of the complex number.
STRING *get_string()
Returns the complex number as a string in the form INTVAL get_bool()
Returns true if the complex number is non-zero.
INTVAL get_integer_keyed(PMC *key)
INTVAL get_integer_keyed_str(STRING *key)
FLOATVAL get_number_keyed(PMC *key)
FLOATVAL get_number_keyed_str(STRING *key)
PMC *get_pmc_keyed(PMC *key)
PMC *get_pmc_keyed_str(STRING *key)
Returns the requested number (real part for PMC *get_pmc_keyed_int(INTVAL key)
Returns the requested number (real part for FLOATVAL get_number_keyed_int(INTVAL key)
Quick hack to emulate get_real() and get_imag():
void set_number_keyed_int(INTVAL key, FLOATVAL v)
Set real or imag depending on key
void set_string_native(STRING *value)
Parses the string void set_pmc(PMC *value)
if void set_integer_native(INTVAL value)
void set_number_native(FLOATVAL value)
Sets the real part of the complex number to void set_integer_keyed(PMC *key, INTVAL value)
void set_integer_keyed_str(STRING *key, INTVAL value)
void set_number_keyed(PMC *key, FLOATVAL value)
void set_number_keyed_str(STRING *key, FLOATVAL value)
void set_pmc_keyed(PMC *key, PMC *value)
void set_pmc_keyed_str(STRING *key, PMC *value)
Sets the requested number (real part for PMC *add(PMC *value, PMC *dest)
PMC *add_int(INTVAL value, PMC *dest)
PMC *add_float(FLOATVAL value, PMC *dest)
Adds PMC *subtract(PMC *value, PMC *dest)
PMC *subtract_int(INTVAL value, PMC *dest)
PMC *subtract_float(FLOATVAL value, PMC *dest)
Subtracts PMC *multiply(PMC *value, PMC *dest)
PMC *multiply_int(INTVAL value, PMC *dest)
PMC *multiply_float(FLOATVAL value, PMC *dest)
Multiplies the complex number with void i_multiply(PMC *value)
void i_multiply_int(INTVAL value)
void i_multiply_float(FLOATVAL value)
Multiplies the complex number SELF inplace with PMC *divide(PMC *value, PMC *dest)
PMC *divide_int(INTVAL value, PMC *dest)
PMC *divide_float(FLOATVAL value, PMC *dest)
Divide the complex number by void i_divide(PMC *value, PMC *dest)
void i_divide_int(INTVAL value, PMC *dest)
void i_divide_float(FLOATVAL value, PMC *dest)
Divide the complex number PMC *neg(PMC *dest)
void neg()
Set INTVAL is_equal(PMC *value)
Compares the complex number with PMC *absolute(PMC *dest)
void i_absolute()
Sets METHOD ln()
Returns the natural logarithm of SELF as a PMC.
METHOD exp()
Returns e ^ SELF as a PMC.
METHOD PMC *sin()
METHOD PMC *cos()
METHOD PMC *tan()
METHOD PMC *csc()
METHOD PMC *sec()
METHOD PMC *cot()
Returns METHOD PMC *asin()
METHOD PMC *acos()
METHOD PMC *atan()
METHOD PMC *acsc()
METHOD PMC *asec()
METHOD PMC *acot()
Returns the inverse function of SELF.
METHOD PMC *sinh()
Returns the arctangent of SELF.
METHOD PMC *cosh()
Returns the arcsine of SELF.
METHOD PMC *tanh()
Returns the arccosine of SELF.
METHOD PMC *asinh()
METHOD PMC *acosh()
METHOD PMC *atanh()
METHOD PMC *acsch()
METHOD PMC *asech()
METHOD PMC *acoth()
The inverse hyperbolic functions. Currently all broken, but for METHOD PMC *pow(PMC *value)
Raise SELF to the power of value. Replacement for the old pow() vtable, which was deleted.TODO: Requires testing
METHOD PMC *sqrt()
Return the square root of SELF.
a+bi
.
real
and imaginary for imag
).
0
and imaginary for 1
).
key = 0 ... get real part key = 1 ... get imag part
value
into a complex number; raises an exception on failure.
value
is a Complex PMC then the complex number is set to its value; otherwise value
's string representation is parsed with set_string_native()
.
value
and the imaginary part to 0.0
real
and imaginary for imag
) to value
.
value
to the complex number, placing the result in dest
.
value
from the complex number, placing the result in dest
.
value
, placing the result in dest
.
value
.
value
, placing the result in dest
.
SELF
by value
inplace.Throws divide by zero exception if divisor is zero.
dest
to the negated value of SELF
.
value
and returns true if they are equal.
dest
to the absolute value of SELF that is the distance from (0.0).
FUNC
(SELF).
func(a+bi) = c+di
, |c|
and |d|
will be correct, confusingly enough.