|
libflame
12600
|
Functions | |
| FLA_Error | FLA_Pythag3 (FLA_Obj chi, FLA_Obj psi, FLA_Obj zeta, FLA_Obj rho) |
| FLA_Error | FLA_Pythag3_ops (float *chi, float *psi, float *zeta, float *rho) |
| FLA_Error | FLA_Pythag3_opd (double *chi, double *psi, double *zeta, double *rho) |
References FLA_Obj_datatype(), FLA_Pythag3_opd(), and FLA_Pythag3_ops().
{
FLA_Datatype datatype;
datatype = FLA_Obj_datatype( chi );
switch ( datatype )
{
case FLA_FLOAT:
{
float* buff_chi = FLA_FLOAT_PTR( chi );
float* buff_psi = FLA_FLOAT_PTR( psi );
float* buff_zeta = FLA_FLOAT_PTR( zeta );
float* buff_rho = FLA_FLOAT_PTR( rho );
FLA_Pythag3_ops( buff_chi,
buff_psi,
buff_zeta,
buff_rho );
break;
}
case FLA_DOUBLE:
{
double* buff_chi = FLA_DOUBLE_PTR( chi );
double* buff_psi = FLA_DOUBLE_PTR( psi );
double* buff_zeta = FLA_DOUBLE_PTR( zeta );
double* buff_rho = FLA_DOUBLE_PTR( rho );
FLA_Pythag3_opd( buff_chi,
buff_psi,
buff_zeta,
buff_rho );
break;
}
case FLA_COMPLEX:
{
FLA_Check_error_code( FLA_OBJECT_NOT_REAL );
break;
}
case FLA_DOUBLE_COMPLEX:
{
FLA_Check_error_code( FLA_OBJECT_NOT_REAL );
break;
}
}
return FLA_SUCCESS;
}
| FLA_Error FLA_Pythag3_opd | ( | double * | chi, |
| double * | psi, | ||
| double * | zeta, | ||
| double * | rho | ||
| ) |
References bl1_d0().
Referenced by FLA_Pythag3().
{
double zero = bl1_d0();
double xabs, yabs, zabs;
double w;
double xabsdivw;
double yabsdivw;
double zabsdivw;
xabs = fabs( *chi );
yabs = fabs( *psi );
zabs = fabs( *zeta );
w = max( xabs, max( yabs, zabs ) );
if ( w == zero )
{
// From netlib dlapy3:
// W can be zero for max(0,nan,0). Adding all three entries
// together will make sure NaN will not disappear.
*rho = xabs + yabs + zabs;
}
else
{
xabsdivw = xabs / w;
yabsdivw = yabs / w;
zabsdivw = zabs / w;
*rho = w * sqrt( xabsdivw * xabsdivw +
yabsdivw * yabsdivw +
zabsdivw * zabsdivw );
}
return FLA_SUCCESS;
}
| FLA_Error FLA_Pythag3_ops | ( | float * | chi, |
| float * | psi, | ||
| float * | zeta, | ||
| float * | rho | ||
| ) |
References bl1_s0().
Referenced by FLA_Pythag3().
{
float zero = bl1_s0();
float xabs, yabs, zabs;
float w;
float xabsdivw;
float yabsdivw;
float zabsdivw;
xabs = fabsf( *chi );
yabs = fabsf( *psi );
zabs = fabsf( *zeta );
w = max( xabs, max( yabs, zabs ) );
if ( w == zero )
{
// From netlib dlapy3:
// W can be zero for max(0,nan,0). Adding all three entries
// together will make sure NaN will not disappear.
*rho = xabs + yabs + zabs;
}
else
{
xabsdivw = xabs / w;
yabsdivw = yabs / w;
zabsdivw = zabs / w;
*rho = w * sqrt( xabsdivw * xabsdivw +
yabsdivw * yabsdivw +
zabsdivw * zabsdivw );
}
return FLA_SUCCESS;
}
1.7.6.1