FastPolyEval  1.0
Fast Evaluation of Real and Complex Polynomials
Data Structures | Macros | Typedefs
compf.h File Reference

Definition of machine complex numbers. More...

Go to the source code of this file.

Data Structures

struct  compf_struct
 Machine complex numbers. More...
 

Macros

#define compf_set(d, a)
 Sets d to a. More...
 
#define compf_setr(d, a)
 Sets d to the real value a. More...
 
#define compf_neg(d, a)
 Sets d to -a. More...
 
#define compf_add(d, a, b)
 Adds a to b and stores the result in d, all of type compf or compf_ptr. More...
 
#define compf_addr(d, a, r)
 Adds the complex number a to the real number b and stores the result in d. More...
 
#define compf_sub(d, a, b)
 Subtracts b from a and stores the result in d, all of type compf or compf_ptr. More...
 
#define compf_subr(d, a, r)
 Subtracts the real number b from the complex number a and stores the result in d. More...
 
#define compf_mul(d, a, b)
 
#define compf_mulr(d, a, r)
 Multiplies the complex number a to the real number r and stores the result in d. More...
 
#define compf_amr(d, a, r)
 Adds the complex number a*r to d, where d,a are complex and r is real. More...
 
#define compf_sqr(d, a)
 Squares a and stores the result in d, all of type compf or compf_ptr. More...
 
#define compf_div(d, a, b)
 Divides a by b and stores the result in d, all of type compf or compf_ptr. More...
 
#define compf_mod(a)   fhypot((a)->x, (a)->y)
 Computes the modulus of the complex number a.
 
#define compf_dist(a, b)   fhypot((a)->x - (b)->x, (a)->y - (b)->y)
 Computes the distance betwwen the complex numbera a and b.
 
#define compf_mod2(a)   ((a)->x * (a)->x + (a)->y * (a)->y)
 
#define compf_log2(a)   (plog2(compf_mod(a)))
 Computes the log_2 of the modulus of the complex number a.
 
#define coeff_log2(a)   (plog2((a) < 0 ? -(a) : (a)))
 Computes the log_2 of the absolute value of the real number a.
 
#define compf_s(a)   (pfloor(plog2(compf_mod(a))) + 1)
 Computes the scale of the complex number a, see [1].
 
#define coeff_s(a)   (pfloor(coeff_log2(a)) + 1)
 Computes the scale of the real number a, see [1].
 

Typedefs

typedef compf_struct compf[1]
 Practical wrapper for compf_struct. More...
 
typedef compf_structcompf_ptr
 Convenience pointer to compf_struct.
 

Detailed Description

Definition of machine complex numbers.

Definition in file compf.h.

Macro Definition Documentation

◆ compf_add

#define compf_add (   d,
  a,
 
)
Value:
(d)->x = (a)->x + (b)->x; \
(d)->y = (a)->y + (b)->y;

Adds a to b and stores the result in d, all of type compf or compf_ptr.

Definition at line 63 of file compf.h.

◆ compf_addr

#define compf_addr (   d,
  a,
 
)
Value:
(d)->x = (a)->x + (r); \
(d)->y = (a)->y;

Adds the complex number a to the real number b and stores the result in d.

Definition at line 67 of file compf.h.

◆ compf_amr

#define compf_amr (   d,
  a,
 
)
Value:
(d)->x += (a)->x * (r); \
(d)->y += (a)->y * (r);

Adds the complex number a*r to d, where d,a are complex and r is real.

Definition at line 87 of file compf.h.

◆ compf_div

#define compf_div (   d,
  a,
 
)
Value:
{ \
coeff_t m2 = compf_mod2(b); \
coeff_t px = ((a)->x * (b)->x + (a)->y * (b)->y) / m2; \
(d)->y = ((a)->y * (b)->x - (a)->x * (b)->y) / m2; \
(d)->x = px;\
}
#define compf_mod2(a)
Definition: compf.h:111

Divides a by b and stores the result in d, all of type compf or compf_ptr.

Definition at line 96 of file compf.h.

◆ compf_mod2

#define compf_mod2 (   a)    ((a)->x * (a)->x + (a)->y * (a)->y)

Computes the square of the modulus of the complex number a.

Warning
There is a danger of overflow, better use the slower compf_mod() instead.

Definition at line 111 of file compf.h.

◆ compf_mul

#define compf_mul (   d,
  a,
 
)
Value:
coeff_t px = (a)->x * (b)->x - (a)->y * (b)->y; \
(d)->y = (a)->x * (b)->y + (a)->y * (b)->x; \
(d)->x = px;
double coeff_t
The machine number type to use for polynomial coefficients and evaluation.
Definition: ntypes.h:81

Definition at line 78 of file compf.h.

◆ compf_mulr

#define compf_mulr (   d,
  a,
 
)
Value:
(d)->x = (a)->x * (r); \
(d)->y = (a)->y * (r);

Multiplies the complex number a to the real number r and stores the result in d.

Definition at line 83 of file compf.h.

◆ compf_neg

#define compf_neg (   d,
 
)
Value:
(d)->x = -(a)->x; \
(d)->y = -(a)->y;

Sets d to -a.

Definition at line 59 of file compf.h.

◆ compf_set

#define compf_set (   d,
 
)
Value:
(d)->x = (a)->x; \
(d)->y = (a)->y;

Sets d to a.

Definition at line 51 of file compf.h.

◆ compf_setr

#define compf_setr (   d,
 
)
Value:
(d)->x = (a); \
(d)->y = 0;

Sets d to the real value a.

Definition at line 55 of file compf.h.

◆ compf_sqr

#define compf_sqr (   d,
 
)
Value:
coeff_t px = (a)->x * (a)->x - (a)->y * (a)->y; \
(d)->y = 2 * (a)->x * (a)->y; \
(d)->x = px;

Squares a and stores the result in d, all of type compf or compf_ptr.

Definition at line 91 of file compf.h.

◆ compf_sub

#define compf_sub (   d,
  a,
 
)
Value:
(d)->x = (a)->x - (b)->x; \
(d)->y = (a)->y - (b)->y;

Subtracts b from a and stores the result in d, all of type compf or compf_ptr.

Definition at line 71 of file compf.h.

◆ compf_subr

#define compf_subr (   d,
  a,
 
)
Value:
(d)->x = (a)->x - (r); \
(d)->y = (a)->y;

Subtracts the real number b from the complex number a and stores the result in d.

Definition at line 75 of file compf.h.

Typedef Documentation

◆ compf

typedef compf_struct compf[1]

Practical wrapper for compf_struct.

To avoid the constant use * and & the type compf is a pointer.

Example of use:

polyf cx = c->x;
compf_struct compf[1]
Practical wrapper for compf_struct.
Definition: compf.h:43
Polynomial with machine floating point complex coefficients.
Definition: polyf.h:30

Definition at line 43 of file compf.h.