diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 81b76314de924ce2cc29f4075b6b68bedd8b02b0..9b4c012a63c4dc937c1c4c260560744a6ba69810 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -773,12 +773,8 @@ float8_timestamptz(PG_FUNCTION_ARGS)
 	{
 		/* Out of range? */
 		if (seconds <
-			(float8) SECS_PER_DAY * (DATETIME_MIN_JULIAN - UNIX_EPOCH_JDATE))
-			ereport(ERROR,
-					(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
-					 errmsg("timestamp out of range: \"%g\"", seconds)));
-
-		if (seconds >=
+			(float8) SECS_PER_DAY * (DATETIME_MIN_JULIAN - UNIX_EPOCH_JDATE)
+			|| seconds >=
 			(float8) SECS_PER_DAY * (TIMESTAMP_END_JULIAN - UNIX_EPOCH_JDATE))
 			ereport(ERROR,
 					(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
@@ -788,7 +784,8 @@ float8_timestamptz(PG_FUNCTION_ARGS)
 		seconds -= ((POSTGRES_EPOCH_JDATE - UNIX_EPOCH_JDATE) * SECS_PER_DAY);
 
 #ifdef HAVE_INT64_TIMESTAMP
-		result = rint(seconds * USECS_PER_SEC);
+		seconds = rint(seconds * USECS_PER_SEC);
+		result = (int64) seconds;
 #else
 		result = seconds;
 #endif
@@ -1624,9 +1621,10 @@ make_interval(PG_FUNCTION_ARGS)
 	result->day = weeks * 7 + days;
 
 #ifdef HAVE_INT64_TIMESTAMP
+	secs = rint(secs * USECS_PER_SEC);
 	result->time = hours * ((int64) SECS_PER_HOUR * USECS_PER_SEC) +
 		mins * ((int64) SECS_PER_MINUTE * USECS_PER_SEC) +
-		(int64) rint(secs * USECS_PER_SEC);
+		(int64) secs;
 #else
 	result->time = hours * (double) SECS_PER_HOUR +
 		mins * (double) SECS_PER_MINUTE +