56 lines
1.5 KiB
Diff
56 lines
1.5 KiB
Diff
diff --git a/modules/fdlibm/src/k_exp.cpp b/modules/fdlibm/src/k_exp.cpp
|
|
--- a/modules/fdlibm/src/k_exp.cpp
|
|
+++ b/modules/fdlibm/src/k_exp.cpp
|
|
@@ -24,18 +24,16 @@
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
//#include <sys/cdefs.h>
|
|
//__FBSDID("$FreeBSD$");
|
|
|
|
-#include <complex.h>
|
|
-
|
|
#include "math_private.h"
|
|
|
|
static const uint32_t k = 1799; /* constant for reduction */
|
|
static const double kln2 = 1246.97177782734161156; /* k * ln2 */
|
|
|
|
/*
|
|
* Compute exp(x), scaled to avoid spurious overflow. An exponent is
|
|
* returned separately in 'expt'.
|
|
@@ -78,32 +76,8 @@ double
|
|
double exp_x, scale;
|
|
int ex_expt;
|
|
|
|
exp_x = __frexp_exp(x, &ex_expt);
|
|
expt += ex_expt;
|
|
INSERT_WORDS(scale, (0x3ff + expt) << 20, 0);
|
|
return (exp_x * scale);
|
|
}
|
|
-
|
|
-double complex
|
|
-__ldexp_cexp(double complex z, int expt)
|
|
-{
|
|
- double x, y, exp_x, scale1, scale2;
|
|
- int ex_expt, half_expt;
|
|
-
|
|
- x = creal(z);
|
|
- y = cimag(z);
|
|
- exp_x = __frexp_exp(x, &ex_expt);
|
|
- expt += ex_expt;
|
|
-
|
|
- /*
|
|
- * Arrange so that scale1 * scale2 == 2**expt. We use this to
|
|
- * compensate for scalbn being horrendously slow.
|
|
- */
|
|
- half_expt = expt / 2;
|
|
- INSERT_WORDS(scale1, (0x3ff + half_expt) << 20, 0);
|
|
- half_expt = expt - half_expt;
|
|
- INSERT_WORDS(scale2, (0x3ff + half_expt) << 20, 0);
|
|
-
|
|
- return (CMPLX(cos(y) * exp_x * scale1 * scale2,
|
|
- sin(y) * exp_x * scale1 * scale2));
|
|
-}
|