diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2004-05-07 21:58:54 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2004-05-07 21:58:54 (GMT) |
commit | 4d0c0891c07c06b5a2243e935669d7abba1e55f8 (patch) | |
tree | 829620c51b25580dbb041be16671bbf543e631a4 /configure.in | |
parent | e88f391fe1fa16695e8e6c495196202704d48f9a (diff) | |
download | hdf5-4d0c0891c07c06b5a2243e935669d7abba1e55f8.zip hdf5-4d0c0891c07c06b5a2243e935669d7abba1e55f8.tar.gz hdf5-4d0c0891c07c06b5a2243e935669d7abba1e55f8.tar.bz2 |
[svn-r8491] Purpose: Bug fix
Description: For certain compiler(PGI we know so far), during conversion
from float or double to unsigned long long, it does round-up when the
fraction part is greater than 0.5, which shouldn't happen.
Solution: check it during configuration and compensate this offset
during testing in dtypes.
Platforms tested: verbena and fuss. verbena is the only machine with
PGI compiler. Ran it on fuss to verify it with other compiler.
Diffstat (limited to 'configure.in')
-rw-r--r-- | configure.in | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/configure.in b/configure.in index 4f87cd4..e4b3e57 100644 --- a/configure.in +++ b/configure.in @@ -2465,6 +2465,43 @@ else fi dnl ---------------------------------------------------------------------- +dnl Set the flag to indicate that the machine can accurately convert +dnl 'float' or 'double' to 'unsigned (long) long' values. +dnl (This flag should be set for all machines, except for PGI compiler +dnl where round-up happens when the fraction of float-point value is greater +dnl than 0.5. +dnl +AC_MSG_CHECKING([if accurately converting floating-point to unsigned long long values works]) + +AC_CACHE_VAL([hdf5_cv_fp_to_ullong_bottom_bit_works], + [AC_TRY_RUN([ + int main(void) + { + float f = 111.60; + double d = 222.55; + unsigned long long l1 = (unsigned long long)f; + unsigned long long l2 = (unsigned long long)d; + int ret = 0; + + if(l1 == 112) + ret = 1; + if(l2 == 223) + ret = 1; + +done: + exit(ret); + } + ], [hdf5_cv_fp_to_ullong_bottom_bit_works=yes], [hdf5_cv_fp_to_ullong_bottom_bit_works=no],)]) + +if test ${hdf5_cv_fp_to_ullong_bottom_bit_works} = "yes"; then + AC_DEFINE([FP_TO_ULLONG_BOTTOM_BIT_WORKS], [1], + [Define if your system can accurately convert floating-point to unsigned long long values.]) + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +dnl ---------------------------------------------------------------------- dnl Set the flag to indicate that the machine can _compile_ dnl 'unsigned long long' to 'float' and 'double' typecasts. dnl (This flag should be set for all machines, except for under Windows when |