// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package math

import	math "math"
export	exp

/*
 *	exp returns the exponential func of its
 *	floating-point argument.
 *
 *	The coefficients are #1069 from Hart and Cheney. (22.35D)
 */

const
(
	p0	= .2080384346694663001443843411e7;
	p1	= .3028697169744036299076048876e5;
	p2	= .6061485330061080841615584556e2;
	q0	= .6002720360238832528230907598e7;
	q1	= .3277251518082914423057964422e6;
	q2	= .1749287689093076403844945335e4;
	log2e	= .14426950408889634073599247e1;
	sqrt2	= .14142135623730950488016887e1;
	maxf	= 10000;
)

func
exp(arg float64) float64
{
	var x, fract, temp1, temp2, xsq float64;
	var ent int;

	if arg == 0. {
		return 1;
	}
	if arg < -maxf {
		return 0;
	}
	if arg > maxf {
		return sys.Inf(1)
	}

	x = arg*log2e;
	ent = int(floor(x));
	fract = (x-float64(ent)) - 0.5;
	xsq = fract*fract;
	temp1 = ((p2*xsq+p1)*xsq+p0)*fract;
	temp2 = ((xsq+q2)*xsq+q1)*xsq + q0;
	return sys.ldexp(sqrt2*(temp2+temp1)/(temp2-temp1), ent);
}
