/* @(#)w_log.c 5.1 93/09/24 */
/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */
#include  <LibConfig.h>
#include  <sys/EfiCdefs.h>
#if defined(LIBM_SCCS) && !defined(lint)
__RCSID("$NetBSD: w_log.c,v 1.9 2002/05/26 22:02:02 wiz Exp $");
#endif

/*
 * wrapper log(x)
 */

#include "math.h"
#include "math_private.h"


double
log(double x)   /* wrapper log */
{
#ifdef _IEEE_LIBM
  return __ieee754_log(x);
#else
  double z;
  z = __ieee754_log(x);
  if(_LIB_VERSION == _IEEE_ || isnan(x) || x > 0.0) return z;
  if(x==0.0)
      return __kernel_standard(x,x,16); /* log(0) */
  else
      return __kernel_standard(x,x,17); /* log(x<0) */
#endif
}
