[Bug 1831808] [NEW] nexttowardl for ppc64el generates wrong results
Hubert Tong
1831808 at bugs.launchpad.net
Wed Jun 5 23:26:10 UTC 2019
Public bug reported:
On PPC, the non-IEEE 128-bit long double is represented as a pair of
doubles. This means that for 1.L, the next representable value in the
direction of 2.L should be 1.L + DBL_EPSILON. The nexttowardl function
does not seem to produce such a result.
To reproduce, compile and link the following C program and run the
resulting executable. The actual output and the expected output is
provided below.
### SOURCE (<stdin>):
long double nexttowardl(long double, long double);
int printf(const char *, ...);
int main(void) {
long double eps = nexttowardl(0.L, 1.L);
long double ans = nexttowardl(1.L, 2.L);
long double ref = 1.L + eps;
typedef unsigned char *ucp;
for (ucp p = (ucp)&ref; p < (ucp)&1[&ref]; ++p) {
printf("%02hhx", *p);
}
printf("\n");
for (ucp p = (ucp)&ans; p < (ucp)&1[&ans]; ++p) {
printf("%02hhx", *p);
}
printf("\n");
}
### COMPILER INVOCATION:
gcc -xc - -lm
### RUN OUTPUT:
000000000000f03f0100000000000000
000000000000f03f0000000000006039
### EXPECTED OUTPUT:
000000000000f03f0100000000000000
000000000000f03f0100000000000000
### VERSION INFO:
> lsb_release -rd
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Return: 0x00:0
> apt-cache policy libc6
libc6:
Installed: 2.23-0ubuntu7
Candidate: 2.23-0ubuntu11
Version table:
2.23-0ubuntu11 500
500 http://ports.ubuntu.com/ubuntu-ports xenial-updates/main ppc64el Packages
2.23-0ubuntu10 500
500 http://ports.ubuntu.com/ubuntu-ports xenial-security/main ppc64el Packages
*** 2.23-0ubuntu7 100
100 /var/lib/dpkg/status
2.23-0ubuntu3 500
500 http://ports.ubuntu.com/ubuntu-ports xenial/main ppc64el Packages
Return: 0x00:0
** Affects: glibc (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to glibc in Ubuntu.
https://bugs.launchpad.net/bugs/1831808
Title:
nexttowardl for ppc64el generates wrong results
Status in glibc package in Ubuntu:
New
Bug description:
On PPC, the non-IEEE 128-bit long double is represented as a pair of
doubles. This means that for 1.L, the next representable value in the
direction of 2.L should be 1.L + DBL_EPSILON. The nexttowardl function
does not seem to produce such a result.
To reproduce, compile and link the following C program and run the
resulting executable. The actual output and the expected output is
provided below.
### SOURCE (<stdin>):
long double nexttowardl(long double, long double);
int printf(const char *, ...);
int main(void) {
long double eps = nexttowardl(0.L, 1.L);
long double ans = nexttowardl(1.L, 2.L);
long double ref = 1.L + eps;
typedef unsigned char *ucp;
for (ucp p = (ucp)&ref; p < (ucp)&1[&ref]; ++p) {
printf("%02hhx", *p);
}
printf("\n");
for (ucp p = (ucp)&ans; p < (ucp)&1[&ans]; ++p) {
printf("%02hhx", *p);
}
printf("\n");
}
### COMPILER INVOCATION:
gcc -xc - -lm
### RUN OUTPUT:
000000000000f03f0100000000000000
000000000000f03f0000000000006039
### EXPECTED OUTPUT:
000000000000f03f0100000000000000
000000000000f03f0100000000000000
### VERSION INFO:
> lsb_release -rd
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Return: 0x00:0
> apt-cache policy libc6
libc6:
Installed: 2.23-0ubuntu7
Candidate: 2.23-0ubuntu11
Version table:
2.23-0ubuntu11 500
500 http://ports.ubuntu.com/ubuntu-ports xenial-updates/main ppc64el Packages
2.23-0ubuntu10 500
500 http://ports.ubuntu.com/ubuntu-ports xenial-security/main ppc64el Packages
*** 2.23-0ubuntu7 100
100 /var/lib/dpkg/status
2.23-0ubuntu3 500
500 http://ports.ubuntu.com/ubuntu-ports xenial/main ppc64el Packages
Return: 0x00:0
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1831808/+subscriptions
More information about the foundations-bugs
mailing list