MAGMA  2.7.1
Matrix Algebra for GPU and Multicore Architectures
 All Classes Files Functions Friends Groups Pages
make_lwork: Round lwork for float

Functions

magmaFloatComplex magma_cmake_lwork (magma_int_t lwork)
 This deals with a subtle bug with returning lwork as a Float. More...
 
double magma_dmake_lwork (magma_int_t lwork)
 This deals with a subtle bug with returning lwork as a Float. More...
 
float magma_smake_lwork (magma_int_t lwork)
 This deals with a subtle bug with returning lwork as a Float. More...
 
magmaDoubleComplex magma_zmake_lwork (magma_int_t lwork)
 This deals with a subtle bug with returning lwork as a Float. More...
 

Detailed Description

Function Documentation

magmaFloatComplex magma_cmake_lwork ( magma_int_t  lwork)

This deals with a subtle bug with returning lwork as a Float.

If lwork > 2**24, then it will get rounded as a Float; we need to ensure it is rounded up instead of down, by multiplying by 1.+eps in Double precision:

float( 16777217            ) == 16777216
float( 16777217 * (1.+eps) ) == 16777218

where eps is Single precision machine epsilon. (Could use 1+2*eps in Single precision, but that can add more than necesary.) If lwork > 2**53, rounding would happen in Double, too, but that's 94M x 94M!

Parameters
[in]lworkWorkspace size.
Returns
lwork, converted to magmaFloatComplex and rounded up slightly if necesary so that returned lwork >= input lwork.
double magma_dmake_lwork ( magma_int_t  lwork)

This deals with a subtle bug with returning lwork as a Float.

If lwork > 2**24, then it will get rounded as a Float; we need to ensure it is rounded up instead of down, by multiplying by 1.+eps in Double precision:

float( 16777217            ) == 16777216
float( 16777217 * (1.+eps) ) == 16777218

where eps is Single precision machine epsilon. (Could use 1+2*eps in Single precision, but that can add more than necesary.) If lwork > 2**53, rounding would happen in Double, too, but that's 94M x 94M!

Parameters
[in]lworkWorkspace size.
Returns
lwork, converted to double and rounded up slightly if necesary so that returned lwork >= input lwork.
float magma_smake_lwork ( magma_int_t  lwork)

This deals with a subtle bug with returning lwork as a Float.

If lwork > 2**24, then it will get rounded as a Float; we need to ensure it is rounded up instead of down, by multiplying by 1.+eps in Double precision:

float( 16777217            ) == 16777216
float( 16777217 * (1.+eps) ) == 16777218

where eps is Single precision machine epsilon. (Could use 1+2*eps in Single precision, but that can add more than necesary.) If lwork > 2**53, rounding would happen in Double, too, but that's 94M x 94M!

Parameters
[in]lworkWorkspace size.
Returns
lwork, converted to float and rounded up slightly if necesary so that returned lwork >= input lwork.
magmaDoubleComplex magma_zmake_lwork ( magma_int_t  lwork)

This deals with a subtle bug with returning lwork as a Float.

If lwork > 2**24, then it will get rounded as a Float; we need to ensure it is rounded up instead of down, by multiplying by 1.+eps in Double precision:

float( 16777217            ) == 16777216
float( 16777217 * (1.+eps) ) == 16777218

where eps is Single precision machine epsilon. (Could use 1+2*eps in Single precision, but that can add more than necesary.) If lwork > 2**53, rounding would happen in Double, too, but that's 94M x 94M!

Parameters
[in]lworkWorkspace size.
Returns
lwork, converted to magmaDoubleComplex and rounded up slightly if necesary so that returned lwork >= input lwork.