OSDN Git Service

* libmath/stubs.c (hypot, hypotf, hypotl): Don't divide by
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / libmath / stubs.c
index 5c67e4a..1968bff 100644 (file)
@@ -1,6 +1,6 @@
 /* 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)
+/* 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)
 {
@@ -38,7 +59,16 @@ cosf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_COSHF
+#ifndef HAVE_COSL
+long double
+cosl(long double x)
+{
+  return cos((double) x);
+}
+#endif
+
+
+#ifndef HAVE_COSHF
 float
 coshf(float x)
 {
@@ -46,7 +76,16 @@ coshf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_EXPF
+#ifndef HAVE_COSHL
+long double
+coshl(long double x)
+{
+  return cosh((double) x);
+}
+#endif
+
+
+#ifndef HAVE_EXPF
 float
 expf(float x)
 {
@@ -54,7 +93,55 @@ expf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_LOGF
+#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)
 {
@@ -62,7 +149,16 @@ logf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_LOG10F
+#ifndef HAVE_LOGL
+long double
+logl(long double x)
+{
+  return log((double) x);
+}
+#endif
+
+
+#ifndef HAVE_LOG10F
 float
 log10f(float x)
 {
@@ -70,7 +166,16 @@ log10f(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_POWF
+#ifndef HAVE_LOG10L
+long double
+log10l(long double x)
+{
+  return log10((double) x);
+}
+#endif
+
+
+#ifndef HAVE_POWF
 float
 powf(float x, float y)
 {
@@ -78,7 +183,16 @@ powf(float x, float y)
 }
 #endif
 
-#if !defined(_GLIBCPP_HAVE_SINF) && !defined(_GLIBCPP_HAVE___BUILTIN_SINF)
+#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)
 {
@@ -86,7 +200,16 @@ sinf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_SINHF
+#ifndef HAVE_SINL
+long double
+sinl(long double x)
+{
+  return sin((double) x);
+}
+#endif
+
+
+#ifndef HAVE_SINHF
 float
 sinhf(float x)
 {
@@ -94,7 +217,16 @@ sinhf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_SQRTF
+#ifndef HAVE_SINHL
+long double
+sinhl(long double x)
+{
+  return sinh((double) x);
+}
+#endif
+
+
+#ifndef HAVE_SQRTF
 float
 sqrtf(float x)
 {
@@ -102,7 +234,16 @@ sqrtf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_TANF
+#ifndef HAVE_SQRTL
+long double
+sqrtl(long double x)
+{
+  return  sqrt((double) x);
+}
+#endif
+
+
+#ifndef HAVE_TANF
 float
 tanf(float x)
 {
@@ -110,10 +251,27 @@ tanf(float x)
 }
 #endif
 
-#ifndef _GLIBCPP_HAVE_TANHF
+#ifndef HAVE_TANL
+long double
+tanl(long double x)
+{
+  return tan((double) x);
+}
+#endif
+
+
+#ifndef HAVE_TANHF
 float
 tanhf(float x)
 {
   return (float) tanh(x);
 }
 #endif
+
+#ifndef HAVE_TANHL
+long double
+tanhl(long double x)
+{
+  return tanh((double) x);
+}
+#endif