/* Stub definitions for libmath subpart of libstdc++. */
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU ISO C++ Library. This library is free
software; you can redistribute it and/or modify it under the
the GNU General Public License. */
#include <math.h>
-#include <bits/c++config.h>
+#include "config.h"
-#if !defined(_GLIBCPP_HAVE_COSF) && !defined(_GLIBCPP_HAVE___BUILTIN_COSF)
-extern float
+/* For targets which do not have support for long double versions,
+ we use the crude approximation. We'll do better later. */
+
+
+#ifndef HAVE_ATAN2F
+float
+atan2f(float x, float y)
+{
+ return (float) atan2(x, y);
+}
+#endif
+
+#ifndef HAVE_ATAN2L
+long double
+atan2l(long double x, long double y)
+{
+ return atan2((double) x, (double) y);
+}
+#endif
+
+
+#ifndef HAVE_COSF
+float
cosf(float x)
{
return (float) cos(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_COSHF
-extern float
+#ifndef HAVE_COSL
+long double
+cosl(long double x)
+{
+ return cos((double) x);
+}
+#endif
+
+
+#ifndef HAVE_COSHF
+float
coshf(float x)
{
return (float) cosh(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_EXPF
-extern float
+#ifndef HAVE_COSHL
+long double
+coshl(long double x)
+{
+ return cosh((double) x);
+}
+#endif
+
+
+#ifndef HAVE_EXPF
+float
expf(float x)
{
return (float) exp(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_LOGF
-extern float
+#ifndef HAVE_EXPL
+long double
+expl(long double x)
+{
+ return exp((double) x);
+}
+#endif
+
+
+/* Compute the hypothenuse of a right triangle with side x and y. */
+#ifndef HAVE_HYPOTF
+float
+hypotf(float x, float y)
+{
+ float s = fabsf(x) + fabsf(y);
+ if (s == 0.0F)
+ return s;
+ x /= s; y /= s;
+ return s * sqrtf(x * x + y * y);
+}
+#endif
+
+#ifndef HAVE_HYPOT
+double
+hypot(double x, double y)
+{
+ double s = fabs(x) + fabs(y);
+ if (s == 0.0)
+ return s;
+ x /= s; y /= s;
+ return s * sqrt(x * x + y * y);
+}
+#endif
+
+#ifndef HAVE_HYPOTL
+long double
+hypotl(long double x, long double y)
+{
+ long double s = fabsl(x) + fabsl(y);
+ if (s == 0.0L)
+ return s;
+ x /= s; y /= s;
+ return s * sqrtl(x * x + y * y);
+}
+#endif
+
+
+
+#ifndef HAVE_LOGF
+float
logf(float x)
{
return (float) log(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_LOG10F
-extern float
+#ifndef HAVE_LOGL
+long double
+logl(long double x)
+{
+ return log((double) x);
+}
+#endif
+
+
+#ifndef HAVE_LOG10F
+float
log10f(float x)
{
return (float) log10(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_POWF
-extern float
-powf(float x)
+#ifndef HAVE_LOG10L
+long double
+log10l(long double x)
{
- return (float) pow(x);
+ return log10((double) x);
}
#endif
-#if !defined(_GLIBCPP_HAVE_SINF) && !defined(_GLIBCPP_HAVE___BUILTIN_SINF)
-extern float
+
+#ifndef HAVE_POWF
+float
+powf(float x, float y)
+{
+ return (float) pow(x, y);
+}
+#endif
+
+#ifndef HAVE_POWL
+long double
+powl(long double x, long double y)
+{
+ return pow((double) x, (double) y);
+}
+#endif
+
+
+#ifndef HAVE_SINF
+float
sinf(float x)
{
return (float) sin(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_SINHF
-extern float
+#ifndef HAVE_SINL
+long double
+sinl(long double x)
+{
+ return sin((double) x);
+}
+#endif
+
+
+#ifndef HAVE_SINHF
+float
sinhf(float x)
{
return (float) sinh(x);
}
#endif
-#ifndef _GLIBCPP_HAVE_TANF
-extern float
+#ifndef HAVE_SINHL
+long double
+sinhl(long double x)
+{
+ return sinh((double) x);
+}
+#endif
+
+
+#ifndef HAVE_SQRTF
+float
+sqrtf(float x)
+{
+ return (float) sqrt(x);
+}
+#endif
+
+#ifndef HAVE_SQRTL
+long double
+sqrtl(long double x)
+{
+ return sqrt((double) x);
+}
+#endif
+
+
+#ifndef HAVE_TANF
+float
tanf(float x)
{
- return (float) tanf(x);
+ return (float) tan(x);
+}
+#endif
+
+#ifndef HAVE_TANL
+long double
+tanl(long double x)
+{
+ return tan((double) x);
}
#endif
-#ifndef _GLIBCPP_HAVE_TANHF
-extern float
+
+#ifndef HAVE_TANHF
+float
tanhf(float x)
{
- return (float) tanhf(x);
+ return (float) tanh(x);
+}
+#endif
+
+#ifndef HAVE_TANHL
+long double
+tanhl(long double x)
+{
+ return tanh((double) x);
}
#endif