libflame revision_anchor
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(), dcomplex::imag, scomplex::imag, dcomplex::real, and scomplex::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().