libflame  revision_anchor
Functions
FLA_Mult_add.c File Reference

(r)

Functions

FLA_Error FLA_Mult_add (FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
 

Function Documentation

◆ FLA_Mult_add()

FLA_Error FLA_Mult_add ( FLA_Obj  alpha,
FLA_Obj  beta,
FLA_Obj  gamma 
)
14 {
15  FLA_Datatype datatype;
16 
17  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
18  FLA_Mult_add_check( alpha, beta, gamma );
19 
20  datatype = FLA_Obj_datatype( gamma );
21 
22  switch ( datatype ){
23 
24  case FLA_FLOAT:
25  {
26  float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
27  float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta );
28  float *buff_gamma = ( float * ) FLA_FLOAT_PTR( gamma );
29 
30  *buff_gamma = *buff_gamma + *buff_alpha * *buff_beta;
31 
32  break;
33  }
34 
35  case FLA_DOUBLE:
36  {
37  double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
38  double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta );
39  double *buff_gamma = ( double * ) FLA_DOUBLE_PTR( gamma );
40 
41  *buff_gamma = *buff_gamma + *buff_alpha * *buff_beta;
42 
43  break;
44  }
45 
46  case FLA_COMPLEX:
47  {
48  scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
49  scomplex *buff_beta = ( scomplex * ) FLA_COMPLEX_PTR( beta );
50  scomplex *buff_gamma = ( scomplex * ) FLA_COMPLEX_PTR( gamma );
51  scomplex alphabeta;
52 
53  alphabeta.real = buff_alpha->real * buff_beta->real -
54  buff_alpha->imag * buff_beta->imag;
55 
56  alphabeta.imag = buff_alpha->real * buff_beta->imag +
57  buff_alpha->imag * buff_beta->real;
58 
59  buff_gamma->real = buff_gamma->real + alphabeta.real;
60  buff_gamma->imag = buff_gamma->imag + alphabeta.imag;
61 
62  break;
63  }
64 
65  case FLA_DOUBLE_COMPLEX:
66  {
67  dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
68  dcomplex *buff_beta = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
69  dcomplex *buff_gamma = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( gamma );
70  dcomplex alphabeta;
71 
72  alphabeta.real = buff_alpha->real * buff_beta->real -
73  buff_alpha->imag * buff_beta->imag;
74 
75  alphabeta.imag = buff_alpha->real * buff_beta->imag +
76  buff_alpha->imag * buff_beta->real;
77 
78  buff_gamma->real = buff_gamma->real + alphabeta.real;
79  buff_gamma->imag = buff_gamma->imag + alphabeta.imag;
80 
81  break;
82  }
83 
84  }
85 
86  return FLA_SUCCESS;
87 }
FLA_Error FLA_Mult_add_check(FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
Definition: FLA_Mult_add_check.c:13
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
Definition: blis_type_defs.h:138
double real
Definition: blis_type_defs.h:139
double imag
Definition: blis_type_defs.h:139
Definition: blis_type_defs.h:133
float imag
Definition: blis_type_defs.h:134
float real
Definition: blis_type_defs.h:134

References FLA_Check_error_level(), FLA_Mult_add_check(), FLA_Obj_datatype(), scomplex::imag, dcomplex::imag, scomplex::real, and dcomplex::real.

Referenced by FLA_Bidiag_UT_u_step_unb_var3(), FLA_Bidiag_UT_u_step_unb_var4(), FLA_Fill_with_cluster_dist(), FLA_Fill_with_geometric_dist(), FLA_Fill_with_inverse_dist(), FLA_Fill_with_linear_dist(), FLA_Fill_with_logarithmic_dist(), FLA_Lyap_h_unb_var1(), FLA_Lyap_h_unb_var2(), FLA_Lyap_h_unb_var3(), FLA_Lyap_h_unb_var4(), FLA_Lyap_n_unb_var1(), FLA_Lyap_n_unb_var2(), FLA_Lyap_n_unb_var3(), and FLA_Lyap_n_unb_var4().