math: rewrite rounding functions (ceil, floor, trunc, round, rint)
authorSzabolcs Nagy <nsz@port70.net>
Tue, 3 Sep 2013 03:27:02 +0000 (03:27 +0000)
committerSzabolcs Nagy <nsz@port70.net>
Thu, 5 Sep 2013 11:30:07 +0000 (11:30 +0000)
commitd1a2ead878c27ac4ec600740320f8b76e1f961e9
tree4da00576cf5df93d9170bdf76a26d9c2c96d3978
parent98be442ee8a2b8b7e0802b604e384d5a2c43282e
math: rewrite rounding functions (ceil, floor, trunc, round, rint)

* faster, smaller, cleaner implementation than the bit hacks of fdlibm
* use arithmetics like y=(double)(x+0x1p52)-0x1p52, which is an integer
neighbor of x in all rounding modes (0<=x<0x1p52) and only use bithacks
when that's faster and smaller (for float it usually is)
* the code assumes standard excess precision handling for casts
* long double code supports both ld80 and ld128
* nearbyint is not changed (it is a wrapper around rint)
15 files changed:
src/math/ceil.c
src/math/ceilf.c
src/math/ceill.c
src/math/floor.c
src/math/floorf.c
src/math/floorl.c
src/math/rint.c
src/math/rintf.c
src/math/rintl.c
src/math/round.c
src/math/roundf.c
src/math/roundl.c
src/math/trunc.c
src/math/truncf.c
src/math/truncl.c