path: root/src/math/coshf.c
diff options
authorSzabolcs Nagy <>2020-01-20 20:38:45 +0000
committerRich Felker <>2020-02-21 23:42:12 -0500
commitd20558148d8a2c52229b02668627697e83ca3840 (patch)
treee4f3373bb8649db621bfeb871ed335e13886b343 /src/math/coshf.c
parentb3797d3b2e10e6fff2a6b04af917e61e95838b08 (diff)
math: fix sinh overflows in non-nearest rounding
The final rounding operation should be done with the correct sign otherwise huge results may incorrectly get rounded to or away from infinity in upward or downward rounding modes. This affected sinh and sinhf which set the sign on the result after a potentially overflowing mul. There may be other non-nearest rounding issues, but this was a known long standing issue with large ulp error (depending on how ulp is defined near infinity). The fix should have no effect on sinh and sinhf performance but may have a tiny effect on cosh and coshf.
Diffstat (limited to 'src/math/coshf.c')
1 files changed, 1 insertions, 1 deletions
diff --git a/src/math/coshf.c b/src/math/coshf.c
index b09f2ee5..e739cff9 100644
--- a/src/math/coshf.c
+++ b/src/math/coshf.c
@@ -28,6 +28,6 @@ float coshf(float x)
/* |x| > log(FLT_MAX) or nan */
- t = __expo2f(x);
+ t = __expo2f(x, 1.0f);
return t;