FLA_Mult_add.c File Reference

(r)


Functions

FLA_Error FLA_Mult_add (FLA_Obj alpha, FLA_Obj beta, FLA_Obj gamma)
void FLA_F2C() fla_mult_add_f (F_INT *alpha, F_INT *beta, F_INT *gamma, F_INT *IERROR)

Function Documentation

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

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

Referenced by fla_mult_add_f().

00036 {
00037   FLA_Datatype datatype;
00038 
00039   if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
00040     FLA_Mult_add_check( alpha, beta, gamma );
00041 
00042   datatype = FLA_Obj_datatype( gamma );
00043   
00044   switch ( datatype ){
00045 
00046   case FLA_FLOAT:
00047   {
00048     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00049     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00050     float *buff_gamma = ( float * ) FLA_FLOAT_PTR( gamma );
00051 
00052     *buff_gamma = *buff_gamma + *buff_alpha + *buff_beta;
00053 
00054     break;
00055   }
00056 
00057   case FLA_DOUBLE:
00058   {
00059     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00060     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00061     double *buff_gamma = ( double * ) FLA_DOUBLE_PTR( gamma );
00062 
00063     *buff_gamma = *buff_gamma + *buff_alpha + *buff_beta;
00064 
00065     break;
00066   }
00067 
00068   case FLA_COMPLEX:
00069   {
00070     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00071     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00072     scomplex *buff_gamma = ( scomplex * ) FLA_COMPLEX_PTR( gamma );
00073     scomplex  alphabeta;
00074 
00075     alphabeta.real = buff_alpha->real * buff_beta->real -
00076                      buff_alpha->imag * buff_beta->imag;
00077 
00078     alphabeta.imag = buff_alpha->real * buff_beta->imag +
00079                      buff_alpha->imag * buff_beta->real;
00080 
00081     buff_gamma->real = buff_gamma->real + alphabeta.real;
00082     buff_gamma->imag = buff_gamma->imag + alphabeta.imag;
00083 
00084     break;
00085   }
00086 
00087   case FLA_DOUBLE_COMPLEX:
00088   {
00089     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00090     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00091     dcomplex *buff_gamma = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( gamma );
00092     dcomplex  alphabeta;
00093 
00094     alphabeta.real = buff_alpha->real * buff_beta->real -
00095                      buff_alpha->imag * buff_beta->imag;
00096 
00097     alphabeta.imag = buff_alpha->real * buff_beta->imag +
00098                      buff_alpha->imag * buff_beta->real;
00099 
00100     buff_gamma->real = buff_gamma->real + alphabeta.real;
00101     buff_gamma->imag = buff_gamma->imag + alphabeta.imag;
00102 
00103     break;
00104   }
00105 
00106   }
00107 
00108   return FLA_SUCCESS;
00109 }

void FLA_F2C() fla_mult_add_f ( F_INT *  alpha,
F_INT *  beta,
F_INT *  gamma,
F_INT *  IERROR 
)

References FLA_Mult_add().

00113 {
00114   *IERROR = FLA_Mult_add( *( ( FLA_Obj * ) alpha ),
00115                           *( ( FLA_Obj * ) beta  ),
00116                           *( ( FLA_Obj * ) gamma ) );
00117 }


Generated on Mon Jul 6 05:45:53 2009 for libflame by  doxygen 1.5.9