|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
#
|
|
# Filename: package/.../musl/0004-math-fix-expf-NAN-and-exp2f-NAN-to-return-NAN-instea.patch
|
|
# Copyright (C) 2016 The OpenSDE Project
|
|
#
|
|
# More information can be found in the files COPYING and README.
|
|
#
|
|
# This patch file is dual-licensed. It is available under the license the
|
|
# patched project is licensed under, as long as it is an OpenSource license
|
|
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
|
|
# of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
|
|
From b023c03b574acdfd73418314a5dcaa83e5cea5a0 Mon Sep 17 00:00:00 2001
|
|
From: Szabolcs Nagy <nsz@port70.net>
|
|
Date: Fri, 4 Mar 2016 21:23:33 +0000
|
|
Subject: [PATCH] math: fix expf(-NAN) and exp2f(-NAN) to return -NAN instead
|
|
of 0
|
|
|
|
expf(-NAN) was treated as expf(-large) which unconditionally
|
|
returns +0, so special case +-NAN.
|
|
reported by Petr Hosek.
|
|
---
|
|
src/math/exp2f.c | 2 ++
|
|
src/math/expf.c | 2 ++
|
|
2 files changed, 4 insertions(+)
|
|
|
|
diff --git a/src/math/exp2f.c b/src/math/exp2f.c
|
|
index cf6126e..296b634 100644
|
|
--- a/src/math/exp2f.c
|
|
+++ b/src/math/exp2f.c
|
|
@@ -91,6 +91,8 @@ float exp2f(float x)
|
|
/* Filter out exceptional cases. */
|
|
ix = u.i & 0x7fffffff;
|
|
if (ix > 0x42fc0000) { /* |x| > 126 */
|
|
+ if (ix > 0x7f800000) /* NaN */
|
|
+ return x;
|
|
if (u.i >= 0x43000000 && u.i < 0x80000000) { /* x >= 128 */
|
|
x *= 0x1p127f;
|
|
return x;
|
|
diff --git a/src/math/expf.c b/src/math/expf.c
|
|
index 16e9afe..feee2b0 100644
|
|
--- a/src/math/expf.c
|
|
+++ b/src/math/expf.c
|
|
@@ -39,6 +39,8 @@ float expf(float x)
|
|
|
|
/* special cases */
|
|
if (hx >= 0x42aeac50) { /* if |x| >= -87.33655f or NaN */
|
|
+ if (hx > 0x7f800000) /* NaN */
|
|
+ return x;
|
|
if (hx >= 0x42b17218 && !sign) { /* x >= 88.722839f */
|
|
/* overflow */
|
|
x *= 0x1p127f;
|
|
--
|
|
2.7.2
|
|
|