|
|
@ -1179,41 +1179,6 @@ typedef struct { const char *dli_fname, dli_fbase; } Dl_info; |
|
|
|
#endif |
|
|
|
#endif /* !defined(__func__) */ |
|
|
|
|
|
|
|
#ifndef HAVE_RINT |
|
|
|
/** |
|
|
|
All integers up to this number can be represented exactly as double precision |
|
|
|
values (DBL_MANT_DIG == 53 for IEEE 754 hardware). |
|
|
|
*/ |
|
|
|
#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1) |
|
|
|
|
|
|
|
/** |
|
|
|
rint(3) implementation for platforms that do not have it. |
|
|
|
Always rounds to the nearest integer with ties being rounded to the nearest |
|
|
|
even integer to mimic glibc's rint() behavior in the "round-to-nearest" |
|
|
|
FPU mode. Hardware-specific optimizations are possible (frndint on x86). |
|
|
|
Unlike this implementation, hardware will also honor the FPU rounding mode. |
|
|
|
*/ |
|
|
|
|
|
|
|
static inline double rint(double x) |
|
|
|
{ |
|
|
|
double f, i; |
|
|
|
f = modf(x, &i); |
|
|
|
/* |
|
|
|
All doubles with absolute values > MAX_EXACT_INTEGER are even anyway, |
|
|
|
no need to check it. |
|
|
|
*/ |
|
|
|
if (x > 0.0) |
|
|
|
i += (double) ((f > 0.5) || (f == 0.5 && |
|
|
|
i <= (double) MAX_EXACT_INTEGER && |
|
|
|
(longlong) i % 2)); |
|
|
|
else |
|
|
|
i -= (double) ((f < -0.5) || (f == -0.5 && |
|
|
|
i >= (double) -MAX_EXACT_INTEGER && |
|
|
|
(longlong) i % 2)); |
|
|
|
return i; |
|
|
|
} |
|
|
|
#endif /* HAVE_RINT */ |
|
|
|
|
|
|
|
/* |
|
|
|
MYSQL_PLUGIN_IMPORT macro is used to export mysqld data |
|
|
|
(i.e variables) for usage in storage engine loadable plugins. |
|
|
|