libflame  12600
Functions
FLA_Mach_params.c File Reference

(r12600)

Functions

FLA_Error FLA_Mach_params (FLA_Machval machval, FLA_Obj val)
float FLA_Mach_params_ops (FLA_Machval machval)
double FLA_Mach_params_opd (FLA_Machval machval)

Function Documentation

FLA_Error FLA_Mach_params ( FLA_Machval  machval,
FLA_Obj  val 
)

References FLA_Check_error_level(), FLA_Mach_params_check(), FLA_Mach_params_opd(), FLA_Mach_params_ops(), and FLA_Obj_datatype().

Referenced by FLA_Hevd_compute_scaling(), FLA_Hevdr_external(), and FLA_Svd_compute_scaling().

{
    FLA_Datatype datatype;

    datatype = FLA_Obj_datatype( val );

    if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
        FLA_Mach_params_check( machval, val );

    switch ( datatype )
    {
        case FLA_FLOAT:
        {
            float*  val_p = ( float* ) FLA_FLOAT_PTR( val );

            *val_p = FLA_Mach_params_ops( machval );

            break;
        }

        case FLA_DOUBLE:
        {
            double* val_p = ( double* ) FLA_DOUBLE_PTR( val );

            *val_p = FLA_Mach_params_opd( machval );

            break;
        }
    }

    return FLA_SUCCESS;
}
double FLA_Mach_params_opd ( FLA_Machval  machval)

References fla_dlamch(), and FLA_Param_map_flame_to_netlib_machval().

Referenced by FLA_Bsvd_compute_shift_opd(), FLA_Bsvd_compute_tol_thresh_opd(), FLA_Bsvd_ext_opd_var1(), FLA_Bsvd_ext_opz_var1(), FLA_Bsvd_v_opd_var1(), FLA_Bsvd_v_opd_var2(), FLA_Bsvd_v_opz_var1(), FLA_Bsvd_v_opz_var2(), FLA_Givens2_opd(), FLA_Mach_params(), FLA_Svv_2x2_opd(), FLA_Tevd_compute_scaling_opd(), FLA_Tevd_eigval_n_opd_var1(), FLA_Tevd_eigval_v_opd_var1(), FLA_Tevd_eigval_v_opd_var3(), FLA_Tevd_find_submatrix_opd(), FLA_Tevd_francis_n_opd_var1(), FLA_Tevd_francis_v_opd_var1(), and FLA_Tevd_n_opz_var1().

{
    static int    first_time = TRUE;
    static double vals[FLA_MACH_N_VALS];

    if ( first_time )
    {
        char lapack_machval;
        int  i;

        for( i = 0; i < FLA_MACH_N_VALS - 1; ++i )
        {
            FLA_Param_map_flame_to_netlib_machval( FLA_MACH_START + i, &lapack_machval );
//printf( "querying %d %c\n", FLA_MACH_START + i, lapack_machval );
            vals[i] = fla_dlamch( &lapack_machval, 1 );
//printf( "got back  %34.29e\n", vals[i] );
        }

        // Store epsilon^2 in the last element.
        vals[i] = vals[0] * vals[0];

        first_time = FALSE;
    }

    return vals[ machval - FLA_MACH_START ];
}
float FLA_Mach_params_ops ( FLA_Machval  machval)

References FLA_Param_map_flame_to_netlib_machval(), and fla_slamch().

Referenced by FLA_Bsvd_compute_shift_ops(), FLA_Bsvd_compute_tol_thresh_ops(), FLA_Bsvd_ext_opc_var1(), FLA_Bsvd_ext_ops_var1(), FLA_Bsvd_v_opc_var1(), FLA_Bsvd_v_ops_var1(), FLA_Mach_params(), FLA_Svv_2x2_ops(), and FLA_Tevd_compute_scaling_ops().

{
    static int    first_time = TRUE;
    static float  vals[FLA_MACH_N_VALS];

    if ( first_time )
    {
        char lapack_machval;
        int  i;

        for( i = 0; i < FLA_MACH_N_VALS - 1; ++i )
        {
            FLA_Param_map_flame_to_netlib_machval( FLA_MACH_START + i, &lapack_machval );
//printf( "querying %d %c\n", FLA_MACH_START + i, lapack_machval );
            vals[i] = fla_slamch( &lapack_machval, 1 );
//printf( "got back  %34.29e\n", vals[i] );
        }

        // Store epsilon^2 in the last element.
        vals[i] = vals[0] * vals[0];

        first_time = FALSE;
    }

    return vals[ machval - FLA_MACH_START ];
}