Assume that we have rint().
Windows has this since _MSC_VER >= 1200, and so do all other live platforms according to the buildfarm, so remove the configure probe and src/port/ substitution. This is part of a series of commits to get rid of no-longer-relevant configure checks and dead src/port/ code. I'm committing them separately to make it easier to back out individual changes if they prove less portable than I expect. Discussion: https://postgr.es/m/15379.1582221614@sss.pgh.pa.us
This commit is contained in:
parent
1200d71a09
commit
f88a058200
13
configure
vendored
13
configure
vendored
@ -15628,19 +15628,6 @@ esac
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ac_fn_c_check_func "$LINENO" "rint" "ac_cv_func_rint"
|
|
||||||
if test "x$ac_cv_func_rint" = xyes; then :
|
|
||||||
$as_echo "#define HAVE_RINT 1" >>confdefs.h
|
|
||||||
|
|
||||||
else
|
|
||||||
case " $LIBOBJS " in
|
|
||||||
*" rint.$ac_objext "* ) ;;
|
|
||||||
*) LIBOBJS="$LIBOBJS rint.$ac_objext"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
ac_fn_c_check_func "$LINENO" "srandom" "ac_cv_func_srandom"
|
ac_fn_c_check_func "$LINENO" "srandom" "ac_cv_func_srandom"
|
||||||
if test "x$ac_cv_func_srandom" = xyes; then :
|
if test "x$ac_cv_func_srandom" = xyes; then :
|
||||||
$as_echo "#define HAVE_SRANDOM 1" >>confdefs.h
|
$as_echo "#define HAVE_SRANDOM 1" >>confdefs.h
|
||||||
|
@ -1707,7 +1707,6 @@ AC_REPLACE_FUNCS(m4_normalize([
|
|||||||
pread
|
pread
|
||||||
pwrite
|
pwrite
|
||||||
random
|
random
|
||||||
rint
|
|
||||||
srandom
|
srandom
|
||||||
strlcat
|
strlcat
|
||||||
strlcpy
|
strlcpy
|
||||||
|
@ -451,9 +451,6 @@
|
|||||||
/* Define to 1 if you have the `readlink' function. */
|
/* Define to 1 if you have the `readlink' function. */
|
||||||
#undef HAVE_READLINK
|
#undef HAVE_READLINK
|
||||||
|
|
||||||
/* Define to 1 if you have the `rint' function. */
|
|
||||||
#undef HAVE_RINT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the global variable
|
/* Define to 1 if you have the global variable
|
||||||
'rl_completion_append_character'. */
|
'rl_completion_append_character'. */
|
||||||
#undef HAVE_RL_COMPLETION_APPEND_CHARACTER
|
#undef HAVE_RL_COMPLETION_APPEND_CHARACTER
|
||||||
|
@ -385,10 +385,6 @@ extern float pg_strtof(const char *nptr, char **endptr);
|
|||||||
extern char *mkdtemp(char *path);
|
extern char *mkdtemp(char *path);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_RINT
|
|
||||||
extern double rint(double x);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_INET_ATON
|
#ifndef HAVE_INET_ATON
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
@ -1,97 +0,0 @@
|
|||||||
/*-------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* rint.c
|
|
||||||
* rint() implementation
|
|
||||||
*
|
|
||||||
* By Pedro Gimeno Fortea, donated to the public domain
|
|
||||||
*
|
|
||||||
* IDENTIFICATION
|
|
||||||
* src/port/rint.c
|
|
||||||
*
|
|
||||||
*-------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
#include "c.h"
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Round to nearest integer, with halfway cases going to the nearest even.
|
|
||||||
*/
|
|
||||||
double
|
|
||||||
rint(double x)
|
|
||||||
{
|
|
||||||
double x_orig;
|
|
||||||
double r;
|
|
||||||
|
|
||||||
/* Per POSIX, NaNs must be returned unchanged. */
|
|
||||||
if (isnan(x))
|
|
||||||
return x;
|
|
||||||
|
|
||||||
if (x <= 0.0)
|
|
||||||
{
|
|
||||||
/* Both positive and negative zero should be returned unchanged. */
|
|
||||||
if (x == 0.0)
|
|
||||||
return x;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Subtracting 0.5 from a number very close to -0.5 can round to
|
|
||||||
* exactly -1.0, producing incorrect results, so we take the opposite
|
|
||||||
* approach: add 0.5 to the negative number, so that it goes closer to
|
|
||||||
* zero (or at most to +0.5, which is dealt with next), avoiding the
|
|
||||||
* precision issue.
|
|
||||||
*/
|
|
||||||
x_orig = x;
|
|
||||||
x += 0.5;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Be careful to return minus zero when input+0.5 >= 0, as that's what
|
|
||||||
* rint() should return with negative input.
|
|
||||||
*/
|
|
||||||
if (x >= 0.0)
|
|
||||||
return -0.0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* For very big numbers the input may have no decimals. That case is
|
|
||||||
* detected by testing x+0.5 == x+1.0; if that happens, the input is
|
|
||||||
* returned unchanged. This also covers the case of minus infinity.
|
|
||||||
*/
|
|
||||||
if (x == x_orig + 1.0)
|
|
||||||
return x_orig;
|
|
||||||
|
|
||||||
/* Otherwise produce a rounded estimate. */
|
|
||||||
r = floor(x);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the rounding did not produce exactly input+0.5 then we're done.
|
|
||||||
*/
|
|
||||||
if (r != x)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The original fractional part was exactly 0.5 (since
|
|
||||||
* floor(input+0.5) == input+0.5). We need to round to nearest even.
|
|
||||||
* Dividing input+0.5 by 2, taking the floor and multiplying by 2
|
|
||||||
* yields the closest even number. This part assumes that division by
|
|
||||||
* 2 is exact, which should be OK because underflow is impossible
|
|
||||||
* here: x is an integer.
|
|
||||||
*/
|
|
||||||
return floor(x * 0.5) * 2.0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The positive case is similar but with signs inverted and using
|
|
||||||
* ceil() instead of floor().
|
|
||||||
*/
|
|
||||||
x_orig = x;
|
|
||||||
x -= 0.5;
|
|
||||||
if (x <= 0.0)
|
|
||||||
return 0.0;
|
|
||||||
if (x == x_orig - 1.0)
|
|
||||||
return x_orig;
|
|
||||||
r = ceil(x);
|
|
||||||
if (r != x)
|
|
||||||
return r;
|
|
||||||
return ceil(x * 0.5) * 2.0;
|
|
||||||
}
|
|
||||||
}
|
|
@ -104,8 +104,6 @@ sub mkvcbuild
|
|||||||
sprompt.c strerror.c tar.c thread.c
|
sprompt.c strerror.c tar.c thread.c
|
||||||
win32env.c win32error.c win32security.c win32setlocale.c);
|
win32env.c win32error.c win32security.c win32setlocale.c);
|
||||||
|
|
||||||
push(@pgportfiles, 'rint.c') if ($vsVersion < '12.00');
|
|
||||||
|
|
||||||
push(@pgportfiles, 'strtof.c') if ($vsVersion < '14.00');
|
push(@pgportfiles, 'strtof.c') if ($vsVersion < '14.00');
|
||||||
|
|
||||||
if ($vsVersion >= '9.00')
|
if ($vsVersion >= '9.00')
|
||||||
|
@ -321,7 +321,6 @@ sub GenerateFiles
|
|||||||
HAVE_READLINE_HISTORY_H => undef,
|
HAVE_READLINE_HISTORY_H => undef,
|
||||||
HAVE_READLINE_READLINE_H => undef,
|
HAVE_READLINE_READLINE_H => undef,
|
||||||
HAVE_READLINK => undef,
|
HAVE_READLINK => undef,
|
||||||
HAVE_RINT => 1,
|
|
||||||
HAVE_RL_COMPLETION_APPEND_CHARACTER => undef,
|
HAVE_RL_COMPLETION_APPEND_CHARACTER => undef,
|
||||||
HAVE_RL_COMPLETION_MATCHES => undef,
|
HAVE_RL_COMPLETION_MATCHES => undef,
|
||||||
HAVE_RL_COMPLETION_SUPPRESS_QUOTE => undef,
|
HAVE_RL_COMPLETION_SUPPRESS_QUOTE => undef,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user