* math/libm-test.inc (lround_test): Add new test.
	(llround_test): Likewise.
	(lrint_test): Likewise.
	(llrint_test): Likewise.
	* sysdeps/ieee754/dbl-64/s_lround.c (__lround): Fix special case
	with result taking up 20 bits.
	* sysdeps/ieee754/dbl-64/s_lrint.c (__lrint): Likewise.
	* sysdeps/ieee754/dbl-64/s_llrint.c (__llrint): Likewise..
	* sysdeps/ieee754/ldbl-96/s_lroundl.c (__lroundl): Fix special
	case with result taking up 31 bits.
	* sysdeps/ieee754/ldbl-96/s_lrintl.c (__lrintl): Likewise.
This commit is contained in:
Ulrich Drepper 2004-02-01 19:23:10 +00:00
parent 00c7074141
commit 3eb614154c
7 changed files with 49 additions and 12 deletions

View File

@ -1,5 +1,17 @@
2004-02-01 Ulrich Drepper <drepper@redhat.com>
* math/libm-test.inc (lround_test): Add new test.
(llround_test): Likewise.
(lrint_test): Likewise.
(llrint_test): Likewise.
* sysdeps/ieee754/dbl-64/s_lround.c (__lround): Fix special case
with result taking up 20 bits.
* sysdeps/ieee754/dbl-64/s_lrint.c (__lrint): Likewise.
* sysdeps/ieee754/dbl-64/s_llrint.c (__llrint): Likewise..
* sysdeps/ieee754/ldbl-96/s_lroundl.c (__lroundl): Fix special
case with result taking up 31 bits.
* sysdeps/ieee754/ldbl-96/s_lrintl.c (__lrintl): Likewise.
* po/nl.po: Update from translation team.
2004-01-30 Andreas Schwab <schwab@suse.de>

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
/* Copyright (C) 1997-2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 1997.
@ -3101,6 +3101,11 @@ lrint_test (void)
TEST_f_l (lrint, 8388600.3L, 8388600);
TEST_f_l (lrint, -8388600.3L, -8388600);
TEST_f_l (lrint, 1071930.0008, 1071930);
#ifndef TEST_FLOAT
TEST_f_l (lrint, 1073741824.01, 1073741824);
#endif
END (lrint);
}
@ -3125,6 +3130,8 @@ llrint_test (void)
TEST_f_L (llrint, 8388600.3L, 8388600);
TEST_f_L (llrint, -8388600.3L, -8388600);
TEST_f_l (llrint, 1071930.0008, 1071930);
/* Test boundary conditions. */
/* 0x1FFFFF */
TEST_f_L (llrint, 2097151.0,2097151LL);
@ -3311,7 +3318,9 @@ lround_test (void)
TEST_f_l (lround, -1.5, -2);
TEST_f_l (lround, 22514.5, 22515);
TEST_f_l (lround, -22514.5, -22515);
TEST_f_l (lround, 1071930.0008, 1071930);
#ifndef TEST_FLOAT
TEST_f_l (lround, 1073741824.01, 1073741824);
TEST_f_l (lround, 2097152.5, 2097153);
TEST_f_l (lround, -2097152.5, -2097153);
#endif
@ -3336,6 +3345,7 @@ llround_test (void)
TEST_f_L (llround, -1.5, -2);
TEST_f_L (llround, 22514.5, 22515);
TEST_f_L (llround, -22514.5, -22515);
TEST_f_l (llround, 1071930.0008, 1071930);
#ifndef TEST_FLOAT
TEST_f_L (llround, 2097152.5, 2097153);
TEST_f_L (llround, -2097152.5, -2097153);
@ -3357,7 +3367,7 @@ llround_test (void)
/* 0x10000000000000 */
TEST_f_L (llround, 4503599627370496.0, 4503599627370496LL);
/* 0x10000080000000 */
TEST_f_L (llrint, 4503601774854144.0, 4503601774854144LL);
TEST_f_L (llround, 4503601774854144.0, 4503601774854144LL);
/* 0x20000000000000 */
TEST_f_L (llround, 9007199254740992.0, 9007199254740992LL);
/* 0x80000000000000 */

View File

@ -1,6 +1,6 @@
/* Round argument to nearest integral value according to current rounding
direction.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -75,7 +75,10 @@ __llrint (double x)
i0 &= 0xfffff;
i0 |= 0x100000;
result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
if (j0 == 20)
result = (long long int) i0;
else
result = ((long long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
}
}
else

View File

@ -1,6 +1,6 @@
/* Round argument to nearest integral value according to current rounding
direction.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -75,7 +75,10 @@ __lrint (double x)
i0 &= 0xfffff;
i0 |= 0x100000;
result = ((long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
if (j0 == 20)
result = (long int) i0;
else
result = ((long int) i0 << (j0 - 20)) | (i1 >> (52 - j0));
}
}
else

View File

@ -1,5 +1,5 @@
/* Round double value to long int.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -58,7 +58,10 @@ __lround (double x)
if (j < i1)
++i0;
result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0));
if (j0 == 20)
result = (long int) i0;
else
result = ((long int) i0 << (j0 - 20)) | (j >> (52 - j0));
}
}
else

View File

@ -1,6 +1,6 @@
/* Round argument to nearest integral value according to current rounding
direction.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -70,7 +70,10 @@ __lrintl (long double x)
GET_LDOUBLE_WORDS (se, i0, i1, t);
j0 = (se & 0x7fff) - 0x3fff;
result = ((long int) i0 << (j0 - 31)) | (i1 >> (63 - j0));
if (j0 == 31)
result = (long int) i0;
else
result = ((long int) i0 << (j0 - 31)) | (i1 >> (63 - j0));
}
}
else

View File

@ -1,5 +1,5 @@
/* Round long double value to long int.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -62,7 +62,10 @@ __lroundl (long double x)
if (j < i1)
++i0;
result = ((long int) i0 << (j0 - 31)) | (j >> (63 - j0));
if (j0 == 31)
result = (long int) i0;
else
result = ((long int) i0 << (j0 - 31)) | (j >> (63 - j0));
}
}
else