diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/H5T.c | 4 | ||||
-rw-r--r-- | src/H5Tconv.c | 4 | ||||
-rw-r--r-- | src/H5Tpkg.h | 13 | ||||
-rw-r--r-- | src/H5config.h.in | 4 |
4 files changed, 19 insertions, 6 deletions
@@ -1208,9 +1208,9 @@ H5T_init_interface(void) /* From long long to floats */ status |= H5T_register(H5T_PERS_HARD, "llong_flt", native_llong, native_float, H5T_conv_llong_float, H5AC_dxpl_id, FALSE); status |= H5T_register(H5T_PERS_HARD, "llong_dbl", native_llong, native_double, H5T_conv_llong_double, H5AC_dxpl_id, FALSE); -#if H5T_CONV_INTERNAL_INTEGER_LDOUBLE +#if H5T_CONV_INTERNAL_LLONG_LDOUBLE status |= H5T_register(H5T_PERS_HARD, "llong_ldbl", native_llong, native_ldouble, H5T_conv_llong_ldouble, H5AC_dxpl_id, FALSE); -#endif /* H5T_CONV_INTERNAL_INTEGER_LDOUBLE */ +#endif /* H5T_CONV_INTERNAL_LLONG_LDOUBLE */ /* From unsigned long long to floats */ #if H5T_CONV_INTERNAL_ULLONG_FP diff --git a/src/H5Tconv.c b/src/H5Tconv.c index c05b3c1..dc56c30 100644 --- a/src/H5Tconv.c +++ b/src/H5Tconv.c @@ -8343,7 +8343,7 @@ done: * *------------------------------------------------------------------------- */ -#if H5T_CONV_INTERNAL_INTEGER_LDOUBLE +#if H5T_CONV_INTERNAL_LLONG_LDOUBLE herr_t H5T_conv_llong_ldouble (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, size_t buf_stride, @@ -8359,7 +8359,7 @@ H5T_conv_llong_ldouble (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, done: FUNC_LEAVE_NOAPI(ret_value); } -#endif /* H5T_CONV_INTERNAL_INTEGER_LDOUBLE */ +#endif /* H5T_CONV_INTERNAL_LLONG_LDOUBLE */ /*------------------------------------------------------------------------- diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h index 9a5ab33..ee0939e 100644 --- a/src/H5Tpkg.h +++ b/src/H5Tpkg.h @@ -99,6 +99,13 @@ #define H5T_CONV_INTERNAL_ULONG_LDOUBLE 1 #endif +/* Define an internal macro for converting long long to long double. Mac OS 10.4 gives some + * incorrect conversions. */ +#if (H5_WANT_DATA_ACCURACY && H5_INTEGER_TO_LDOUBLE_ACCURATE && H5_LLONG_TO_LDOUBLE_CORRECT) || \ + (!H5_WANT_DATA_ACCURACY) +#define H5T_CONV_INTERNAL_LLONG_LDOUBLE 1 +#endif + /* Define an internal macro for converting unsigned long long to floating numbers. SGI compilers give * some incorect conversion. 64-bit Solaris does different rounding. Windows Visual Studio 6 does * not support unsigned long long. */ @@ -110,9 +117,11 @@ /* Define an internal macro for converting unsigned long long to long double. SGI compilers give * some incorect conversion. 64-bit Solaris does different rounding. Windows Visual Studio 6 does * not support unsigned long long. For FreeBSD(sleipnir), the last 2 bytes of mantissa are lost when - * compiler tries to do the conversion. For Cygwin, compiler doesn't do rounding correctly. */ + * compiler tries to do the conversion. For Cygwin, compiler doesn't do rounding correctly. + * Mac OS 10.4 gives some incorrect result. */ #if (H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS && H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE && \ - H5_ULLONG_TO_LDOUBLE_PRECISION) || (!H5_WANT_DATA_ACCURACY && H5_ULLONG_TO_FP_CAST_WORKS) + H5_ULLONG_TO_LDOUBLE_PRECISION && H5_LLONG_TO_LDOUBLE_CORRECT) || (!H5_WANT_DATA_ACCURACY && \ + H5_ULLONG_TO_FP_CAST_WORKS) #define H5T_CONV_INTERNAL_ULLONG_LDOUBLE 1 #endif diff --git a/src/H5config.h.in b/src/H5config.h.in index 5497037..86e30f2 100644 --- a/src/H5config.h.in +++ b/src/H5config.h.in @@ -394,6 +394,10 @@ /* Define if your system can compile long long to floating-point casts. */ #undef LLONG_TO_FP_CAST_WORKS +/* Define if your system can convert (unsigned) long long to long double + values correctly. */ +#undef LLONG_TO_LDOUBLE_CORRECT + /* Define if your system can handle complicated MPI derived datatype correctly. */ #undef MPI_COMPLEX_DERIVED_DATATYPE_WORKS |