about summary refs log tree commit diff
path: root/src/math/__sinl.c
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2013-09-05 10:58:48 +0000
committerSzabolcs Nagy <nsz@port70.net>2013-09-05 11:30:09 +0000
commit07039ed8563b850624146c938ae201a1099d2f75 (patch)
tree2a751e8684596943be0bca4391289759b718f2b4 /src/math/__sinl.c
parent8dba5486288e719ed290cccefcd932ed32756d7c (diff)
downloadmusl-07039ed8563b850624146c938ae201a1099d2f75.tar.gz
musl-07039ed8563b850624146c938ae201a1099d2f75.tar.xz
musl-07039ed8563b850624146c938ae201a1099d2f75.zip
math: fix exp2l asm on x86 (raise underflow correctly)
there were two problems:
* omitted underflow on subnormal results: exp2l(-16383.5) was calculated
as sqrt(2)*2^-16384, the last bits of sqrt(2) are zero so the down scaling
does not underflow eventhough the result is in subnormal range
* spurious underflow for subnormal inputs: exp2l(0x1p-16400) was evaluated
as f2xm1(x)+1 and f2xm1 raised underflow (because inexact subnormal result)

the first issue is fixed by raising underflow manually if x is in
(-32768,-16382] and not integer (x-0x1p63+0x1p63 != x)

the second issue is fixed by treating x in (-0x1p64,0x1p64) specially

for these fixes the special case handling was completely rewritten
Diffstat (limited to 'src/math/__sinl.c')
0 files changed, 0 insertions, 0 deletions