Ruby  3.1.0dev(2021-09-10revisionb76ad15ed0da636161de0243c547ee1e6fc95681)
Macros | Functions | Variables
complex.c File Reference

(b76ad15ed0da636161de0243c547ee1e6fc95681)

#include "ruby/internal/config.h"
#include <ctype.h>
#include <math.h>
#include "id.h"
#include "internal.h"
#include "internal/array.h"
#include "internal/class.h"
#include "internal/complex.h"
#include "internal/numeric.h"
#include "internal/object.h"
#include "internal/rational.h"
#include "ruby_assert.h"
Include dependency graph for complex.c:

Go to the source code of this file.

Macros

#define _USE_MATH_DEFINES   1
 
#define ZERO   INT2FIX(0)
 
#define ONE   INT2FIX(1)
 
#define TWO   INT2FIX(2)
 
#define RFLOAT_0   DBL2NUM(0)
 
#define id_to_i   idTo_i
 
#define id_to_r   idTo_r
 
#define id_negate   idUMinus
 
#define id_expt   idPow
 
#define id_to_f   idTo_f
 
#define id_quo   idQuo
 
#define id_fdiv   idFdiv
 
#define fun1(n)
 
#define fun2(n)
 
#define PRESERVE_SIGNEDZERO
 
#define f_positive_p(x)   (!f_negative_p(x))
 
#define f_nonzero_p(x)   (!f_zero_p(x))
 
#define k_exact_p(x)   (!RB_FLOAT_TYPE_P(x))
 
#define k_exact_zero_p(x)   (k_exact_p(x) && f_zero_p(x))
 
#define get_dat1(x)   struct RComplex *dat = RCOMPLEX(x)
 
#define get_dat2(x, y)   struct RComplex *adat = RCOMPLEX(x), *bdat = RCOMPLEX(y)
 
#define imp1(n)
 
#define cospi(x)   cos((x) * M_PI)
 
#define sinpi(x)   sin((x) * M_PI)
 
#define rb_raise_zerodiv()   rb_raise(rb_eZeroDivError, "divided by 0")
 
#define nucomp_quo   rb_complex_div
 
#define FINITE_TYPE_P(v)   (RB_INTEGER_TYPE_P(v) || RB_TYPE_P(v, T_RATIONAL))
 

Functions

 fun1 (to_r)
 
 fun2 (expt)
 
VALUE rb_flo_is_finite_p (VALUE num)
 
VALUE rb_flo_is_infinite_p (VALUE num)
 
 imp1 (cos)
 
 imp1 (sin)
 
VALUE rb_dbl_complex_new_polar_pi (double abs, double ang)
 
VALUE rb_complex_real (VALUE self)
 
VALUE rb_complex_imag (VALUE self)
 
VALUE rb_complex_uminus (VALUE self)
 
VALUE rb_complex_plus (VALUE self, VALUE other)
 
VALUE rb_complex_minus (VALUE self, VALUE other)
 
VALUE rb_complex_mul (VALUE self, VALUE other)
 
VALUE rb_complex_div (VALUE self, VALUE other)
 
VALUE rb_complex_pow (VALUE self, VALUE other)
 
VALUE rb_complex_abs (VALUE self)
 
VALUE rb_complex_arg (VALUE self)
 
VALUE rb_complex_conjugate (VALUE self)
 
st_index_t rb_complex_hash (VALUE self)
 
VALUE rb_complex_raw (VALUE x, VALUE y)
 
VALUE rb_complex_new (VALUE x, VALUE y)
 
VALUE rb_complex_new_polar (VALUE x, VALUE y)
 
VALUE rb_complex_polar (VALUE x, VALUE y)
 
VALUE rb_Complex (VALUE x, VALUE y)
 
VALUE rb_dbl_complex_new (double real, double imag)
 Creates a Complex object. More...
 
void Init_Complex (void)
 

Variables

VALUE rb_cComplex
 

Macro Definition Documentation

◆ _USE_MATH_DEFINES

#define _USE_MATH_DEFINES   1

Definition at line 12 of file complex.c.

◆ cospi

#define cospi (   x)    cos((x) * M_PI)

Definition at line 654 of file complex.c.

◆ f_nonzero_p

#define f_nonzero_p (   x)    (!f_zero_p(x))

Definition at line 335 of file complex.c.

◆ f_positive_p

#define f_positive_p (   x)    (!f_negative_p(x))

Definition at line 317 of file complex.c.

◆ FINITE_TYPE_P

#define FINITE_TYPE_P (   v)    (RB_INTEGER_TYPE_P(v) || RB_TYPE_P(v, T_RATIONAL))

Definition at line 1440 of file complex.c.

◆ fun1

#define fun1 (   n)
Value:
inline static VALUE \
f_##n(VALUE x)\
{\
return rb_funcall(x, id_##n, 0);\
}

Definition at line 53 of file complex.c.

◆ fun2

#define fun2 (   n)
Value:
inline static VALUE \
f_##n(VALUE x, VALUE y)\
{\
return rb_funcall(x, id_##n, 1, y);\
}

Definition at line 60 of file complex.c.

◆ get_dat1

#define get_dat1 (   x)    struct RComplex *dat = RCOMPLEX(x)

Definition at line 387 of file complex.c.

◆ get_dat2

#define get_dat2 (   x,
  y 
)    struct RComplex *adat = RCOMPLEX(x), *bdat = RCOMPLEX(y)

Definition at line 390 of file complex.c.

◆ id_expt

#define id_expt   idPow

Definition at line 48 of file complex.c.

◆ id_fdiv

#define id_fdiv   idFdiv

Definition at line 51 of file complex.c.

◆ id_negate

#define id_negate   idUMinus

Definition at line 47 of file complex.c.

◆ id_quo

#define id_quo   idQuo

Definition at line 50 of file complex.c.

◆ id_to_f

#define id_to_f   idTo_f

Definition at line 49 of file complex.c.

◆ id_to_i

#define id_to_i   idTo_i

Definition at line 45 of file complex.c.

◆ id_to_r

#define id_to_r   idTo_r

Definition at line 46 of file complex.c.

◆ imp1

#define imp1 (   n)
Value:
inline static VALUE \
m_##n##_bang(VALUE x)\
{\
return rb_math_##n(x);\
}

Definition at line 561 of file complex.c.

◆ k_exact_p

#define k_exact_p (   x)    (!RB_FLOAT_TYPE_P(x))

Definition at line 383 of file complex.c.

◆ k_exact_zero_p

#define k_exact_zero_p (   x)    (k_exact_p(x) && f_zero_p(x))

Definition at line 385 of file complex.c.

◆ nucomp_quo

#define nucomp_quo   rb_complex_div

Definition at line 956 of file complex.c.

◆ ONE

#define ONE   INT2FIX(1)

Definition at line 30 of file complex.c.

◆ PRESERVE_SIGNEDZERO

#define PRESERVE_SIGNEDZERO

Definition at line 67 of file complex.c.

◆ rb_raise_zerodiv

#define rb_raise_zerodiv ( )    rb_raise(rb_eZeroDivError, "divided by 0")

Definition at line 935 of file complex.c.

◆ RFLOAT_0

#define RFLOAT_0   DBL2NUM(0)

Definition at line 33 of file complex.c.

◆ sinpi

#define sinpi (   x)    sin((x) * M_PI)

Definition at line 659 of file complex.c.

◆ TWO

#define TWO   INT2FIX(2)

Definition at line 31 of file complex.c.

◆ ZERO

#define ZERO   INT2FIX(0)

Definition at line 29 of file complex.c.

Function Documentation

◆ fun1()

fun1 ( to_r  )

Definition at line 277 of file complex.c.

◆ fun2()

fun2 ( expt  )

Definition at line 289 of file complex.c.

References RB_INTEGER_TYPE_P, rb_numeric_quo(), and y.

◆ imp1() [1/2]

imp1 ( cos  )

Definition at line 568 of file complex.c.

References rb_math_log().

◆ imp1() [2/2]

imp1 ( sin  )

Definition at line 578 of file complex.c.

◆ Init_Complex()

void Init_Complex ( void  )

Definition at line 2310 of file complex.c.

◆ rb_Complex()

VALUE rb_Complex ( VALUE  x,
VALUE  y 
)

Definition at line 1552 of file complex.c.

References y.

◆ rb_complex_abs()

VALUE rb_complex_abs ( VALUE  self)

Definition at line 1164 of file complex.c.

References get_dat1.

◆ rb_complex_arg()

VALUE rb_complex_arg ( VALUE  self)

Definition at line 1211 of file complex.c.

References get_dat1, and rb_math_atan2().

◆ rb_complex_conjugate()

VALUE rb_complex_conjugate ( VALUE  self)

Definition at line 1257 of file complex.c.

References get_dat1.

◆ rb_complex_div()

VALUE rb_complex_div ( VALUE  self,
VALUE  other 
)

Definition at line 951 of file complex.c.

◆ rb_complex_hash()

st_index_t rb_complex_hash ( VALUE  self)

Definition at line 1326 of file complex.c.

References get_dat1, NUM2LONG, rb_hash(), and rb_memhash().

Referenced by rb_iseq_cdhash_hash().

◆ rb_complex_imag()

VALUE rb_complex_imag ( VALUE  self)

Definition at line 746 of file complex.c.

References get_dat1.

◆ rb_complex_minus()

VALUE rb_complex_minus ( VALUE  self,
VALUE  other 
)

Definition at line 815 of file complex.c.

◆ rb_complex_mul()

VALUE rb_complex_mul ( VALUE  self,
VALUE  other 
)

Definition at line 875 of file complex.c.

◆ rb_complex_new()

VALUE rb_complex_new ( VALUE  x,
VALUE  y 
)

Definition at line 1534 of file complex.c.

Referenced by rb_dbl_complex_new_polar_pi().

◆ rb_complex_new_polar()

VALUE rb_complex_new_polar ( VALUE  x,
VALUE  y 
)

Definition at line 1540 of file complex.c.

Referenced by rb_complex_polar().

◆ rb_complex_plus()

VALUE rb_complex_plus ( VALUE  self,
VALUE  other 
)

Definition at line 781 of file complex.c.

◆ rb_complex_polar()

VALUE rb_complex_polar ( VALUE  x,
VALUE  y 
)

Definition at line 1546 of file complex.c.

References rb_complex_new_polar(), and y.

◆ rb_complex_pow()

VALUE rb_complex_pow ( VALUE  self,
VALUE  other 
)

Definition at line 988 of file complex.c.

◆ rb_complex_raw()

VALUE rb_complex_raw ( VALUE  x,
VALUE  y 
)

Definition at line 1528 of file complex.c.

Referenced by rb_dbl_complex_new().

◆ rb_complex_real()

VALUE rb_complex_real ( VALUE  self)

Definition at line 729 of file complex.c.

References get_dat1.

◆ rb_complex_uminus()

VALUE rb_complex_uminus ( VALUE  self)

Definition at line 761 of file complex.c.

References get_dat1.

◆ rb_dbl_complex_new()

VALUE rb_dbl_complex_new ( double  real,
double  imag 
)

Creates a Complex object.

Parameters
realreal part value
imagimaginary part value
Returns
a new Complex object

Definition at line 1568 of file complex.c.

References DBL2NUM, and rb_complex_raw().

◆ rb_dbl_complex_new_polar_pi()

VALUE rb_dbl_complex_new_polar_pi ( double  abs,
double  ang 
)

Definition at line 663 of file complex.c.

References cospi, DBL2NUM, rb_complex_new(), RFLOAT_0, and sinpi.

◆ rb_flo_is_finite_p()

VALUE rb_flo_is_finite_p ( VALUE  num)

Definition at line 1698 of file numeric.c.

References isfinite, RBOOL, and RFLOAT_VALUE.

◆ rb_flo_is_infinite_p()

VALUE rb_flo_is_infinite_p ( VALUE  num)

Definition at line 1678 of file numeric.c.

References INT2FIX, Qnil, and RFLOAT_VALUE.

Variable Documentation

◆ rb_cComplex

VALUE rb_cComplex

Definition at line 38 of file complex.c.

y
size_t y
Definition: memory.h:207
VALUE
unsigned long VALUE
Definition: value.h:38
rb_funcall
VALUE rb_funcall(VALUE, ID, int,...)
Calls a method.
Definition: vm_eval.c:1113