Loading...
Searching...
No Matches
make_lwork: Round lwork for float
Utilities » Miscellaneous utilities

## Functions

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

## Detailed Description

## Function Documentation

## magma_cmake_lwork()

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.

## magma_dmake_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.

## magma_smake_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.

## magma_zmake_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.