/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include "libm.h"
#include "longdouble.h"
/*
* exp10l(x)
* exp10(x) = 10**x = exp(x*ln(10)) = exp(n*ln2+(x*ln10-n*ln2))
* If x is an integer <= M then use repeat multiplication. For
* 10**M is the largest representable integer, where
* M = 10 single precision (24 bits)
* M = 22 double precision (53 bits)
* M = 48 quadruple precision (113 bits)
*/
#define M 48
/* logt2hi : last 32 bits is zero for quad prec */
static const long double
long double
exp10l(long double x) {
long double t, tenp;
int k;
if (!finitel(x)) {
return (x + x);
else
return (zero);
}
return (one + x);
if (x <= lg10ovt)
if (x >= lg10uft) {
k = (int) x;
tenp = 10.0L;
/* x is a small +integer */
if (0 <= k && k <= M && (long double) k == x) {
t = one;
if (k & 1)
t *= tenp;
k >>= 1;
while (k) {
if (k & 1)
t *= tenp;
k >>= 1;
}
return (t);
}
t * logt2lo)), (int) t));
} else
else
}