//--------------------------------------------------------------------------
// Author: Thomas Nowotny
//
// Institute: Institut fuer Theoretische Physik
// Augustusplatz 10-11
// 04109 Leipzig
//
// email to: nowotny@itp.uni-leipzig.de
//
// initial version: 11/00
// last change: 11/00
//--------------------------------------------------------------------------
#include "cln_eld.h"
template <>
inline eld<cl_F> log(const eld<cl_F> e)
{
eld<cl_F> en;
en.xm= As(cl_F)(ln(e.xm));
en.xm-= abs(en.xm*__eld_eps);
en.x= As(cl_F)(ln(e.x));
en.xp= As(cl_F)(ln(e.xp));
en.xp+= abs(en.xp*__eld_eps);
return en;
}
template <>
inline eld<cl_F> atanh(const eld<cl_F> e)
{
eld<cl_F> en;
assert(e > -one);
assert(e < one);
en.xm= As(cl_F)(atanh(e.xm));
en.xm-= abs(en.xm*__eld_eps);
en.x= As(cl_F)(atanh(e.x));
en.xp= As(cl_F)(atanh(e.xp));
en.xp+= abs(en.xp*__eld_eps);
return en;
}
template <>
inline eld<cl_F> trunc(const eld<cl_F> e)
{
eld<cl_F> en;
en.xm= ftruncate(e.xm);
en.x= ftruncate(e.x);
en.xp= ftruncate(e.xp);
return en;
}
template <>
inline eld<cl_F> pow(const eld<cl_F> e, const int ee)
{
return pow(e, cl_float(cl_I(ee), __eld_eps));
}
template <>
inline long conv_to_long(const eld<cl_F> e)
{
return cl_I_to_long(truncate1(e.x));
}
template <>
inline int conv_to_int(const eld<cl_F> e)
{
return cl_I_to_int(truncate1(e.x));
}
template <>
inline short conv_to_short(const eld<cl_F> e)
{
return (short) cl_I_to_int(truncate1(e.x));
}