diff options
author | 2014-02-11 18:21:47 +0000 | |
---|---|---|
committer | 2014-02-11 18:21:47 +0000 | |
commit | 00ee142f1d6a4f0689a9df50fe896b7be2ffeae3 (patch) | |
tree | f18d7e401910ecb9e3e1b359721c7329fa05be13 /lib/libm/src | |
parent | - grow the decompression buffer more aggressively if we have (diff) | |
download | wireguard-openbsd-00ee142f1d6a4f0689a9df50fe896b7be2ffeae3.tar.xz wireguard-openbsd-00ee142f1d6a4f0689a9df50fe896b7be2ffeae3.zip |
Make floor round to integral value less than x, when x is tiny.
Reported by dcoppa@, thanks! OK kettenis@, dcoppa@.
Diffstat (limited to 'lib/libm/src')
-rw-r--r-- | lib/libm/src/ld128/s_floorl.c | 7 | ||||
-rw-r--r-- | lib/libm/src/ld80/s_floorl.c | 7 |
2 files changed, 8 insertions, 6 deletions
diff --git a/lib/libm/src/ld128/s_floorl.c b/lib/libm/src/ld128/s_floorl.c index e3c05d1c914..a7d8140cc64 100644 --- a/lib/libm/src/ld128/s_floorl.c +++ b/lib/libm/src/ld128/s_floorl.c @@ -34,10 +34,11 @@ floorl(long double x) jj0 = ((i0>>48)&0x7fff)-0x3fff; if(jj0<48) { if(jj0<0) { /* raise inexact if x != 0 */ - if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ - if(i0>=0) {i0=i1=0;} + if(huge+x>0.0) { + if(i0>=0) + return 0.0L; else if(((i0&0x7fffffffffffffffLL)|i1)!=0) - { i0=0xbfff000000000000ULL;i1=0;} + return -1.0L; } } else { i = (0x0000ffffffffffffULL)>>jj0; diff --git a/lib/libm/src/ld80/s_floorl.c b/lib/libm/src/ld80/s_floorl.c index a1751ab9615..a5b787796bc 100644 --- a/lib/libm/src/ld80/s_floorl.c +++ b/lib/libm/src/ld80/s_floorl.c @@ -35,10 +35,11 @@ floorl(long double x) jj0 = (se&0x7fff)-0x3fff; if(jj0<31) { if(jj0<0) { /* raise inexact if x != 0 */ - if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ - if(sx==0) {se=0;i0=i1=0;} + if(huge+x>0.0) { + if(sx==0) + return 0.0L; else if(((se&0x7fff)|i0|i1)!=0) - { se=0xbfff;i0=i1=0;} + return -1.0L; } } else { i = (0x7fffffff)>>jj0; |