Gromacs
2019
|
Declares real
and related constants.
Macros | |
#define | GMX_DOUBLE_EPS 2.2204460492503131e-16 |
Double precision accuracy. | |
#define | GMX_DOUBLE_MAX 1.7976931348623157e+308 |
Maximum double precision value - reduced 1 unit in last digit for MSVC. | |
#define | GMX_DOUBLE_MIN 2.2250738585072014e-308 |
Minimum double precision value. | |
#define | GMX_FLOAT_EPS 1.19209290e-07F |
Single precision accuracy. | |
#define | GMX_FLOAT_MAX 3.40282346E+38F |
Maximum single precision value - reduced 1 unit in last digit for MSVC. | |
#define | GMX_FLOAT_MIN 1.175494351E-38F |
Minimum single precision value. | |
#define | GMX_DOUBLE_NEGZERO (-0.0) |
Negative zero in double. | |
#define | GMX_FLOAT_NEGZERO (-0.0f) |
Negative zero in float. | |
#define | GMX_FLOAT_MAX_SIMD_WIDTH 16 |
The maximum supported number of float elements in a SIMD register. | |
#define | GMX_DOUBLE_MAX_SIMD_WIDTH 8 |
The maximum supported number of double elements in a SIMD register. | |
#define | HAVE_REAL |
Used to check whether real is already defined. | |
#define | GMX_MPI_REAL MPI_FLOAT |
MPI data type for real . | |
#define | GMX_REAL_EPS GMX_FLOAT_EPS |
Accuracy for real . | |
#define | GMX_REAL_MIN GMX_FLOAT_MIN |
Smallest non-zero value for real . | |
#define | GMX_REAL_MAX GMX_FLOAT_MAX |
Largest finite value for real . | |
#define | GMX_REAL_NEGZERO GMX_FLOAT_NEGZERO |
Negative zero for real . | |
#define | gmx_real_fullprecision_pfmt "%14.7e" |
Format string for full real precision. | |
#define | GMX_REAL_MAX_SIMD_WIDTH GMX_FLOAT_MAX_SIMD_WIDTH |
The maximum supported number of real elements in a SIMD register. | |
Typedefs | |
typedef float | real |
Precision-dependent GROMACS floating-point type. | |
Functions | |
constexpr real | operator""_real (long double x) |
User defined literal for real numbers. More... | |
constexpr real operator""_real | ( | long double | x | ) |
User defined literal for real numbers.
Examples: 2._real, 2.5_real, .5_real. The number is always of type real.
It is best to use a real constant whenever it is used only with operands which are real. If a constant is double than the compiler is forced to do operations directly involving the constant in double even if all variables are real. A constant shouldn't be real when used with double operands, because then the constant is less accurate with GMX_DOUBLE=no.
See https://en.cppreference.com/w/cpp/language/user_literal for details on this lanuage feature.