MAGMA  2.3.0 Matrix Algebra for GPU and Multicore Architectures
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...

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

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] lwork Workspace 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] lwork Workspace 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] lwork Workspace 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] lwork Workspace size.
Returns
lwork, converted to magmaDoubleComplex and rounded up slightly if necesary so that returned lwork >= input lwork.