stubs.c revision 117397
110710Sddmitriev/* Stub definitions for libmath subpart of libstdc++. */ 210710Sddmitriev 310710Sddmitriev/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. 410710Sddmitriev 510710Sddmitriev This file is part of the GNU ISO C++ Library. This library is free 610710Sddmitriev software; you can redistribute it and/or modify it under the 710710Sddmitriev terms of the GNU General Public License as published by the 810710Sddmitriev Free Software Foundation; either version 2, or (at your option) 910710Sddmitriev any later version. 1010710Sddmitriev 1110710Sddmitriev This library is distributed in the hope that it will be useful, 1210710Sddmitriev but WITHOUT ANY WARRANTY; without even the implied warranty of 1310710Sddmitriev MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1410710Sddmitriev GNU General Public License for more details. 1510710Sddmitriev 1610710Sddmitriev You should have received a copy of the GNU General Public License along 1710710Sddmitriev with this library; see the file COPYING. If not, write to the Free 1810710Sddmitriev Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 1910710Sddmitriev USA. 2010710Sddmitriev 2110710Sddmitriev As a special exception, you may use this file as part of a free software 2210710Sddmitriev library without restriction. Specifically, if other files instantiate 2310710Sddmitriev templates or use macros or inline functions from this file, or you compile 2410710Sddmitriev this file and link it with other files to produce an executable, this 2510710Sddmitriev file does not by itself cause the resulting executable to be covered by 2610710Sddmitriev the GNU General Public License. This exception does not however 2710710Sddmitriev invalidate any other reasons why the executable file might be covered by 2810710Sddmitriev the GNU General Public License. */ 2910710Sddmitriev 3010710Sddmitriev#include <math.h> 3110710Sddmitriev#include "config.h" 3210710Sddmitriev 3310710Sddmitriev/* For targets which do not have support for long double versions, 3410710Sddmitriev we use the crude approximation. We'll do better later. */ 3510710Sddmitriev 3610710Sddmitriev 3710710Sddmitriev#ifndef HAVE_ATAN2F 3810710Sddmitrievfloat 3910710Sddmitrievatan2f(float x, float y) 4010710Sddmitriev{ 4110710Sddmitriev return (float) atan2(x, y); 4210710Sddmitriev} 4310710Sddmitriev#endif 4410710Sddmitriev 4510710Sddmitriev#ifndef HAVE_ATAN2L 4610710Sddmitrievlong double 4710710Sddmitrievatan2l(long double x, long double y) 4810710Sddmitriev{ 4910710Sddmitriev return atan2((double) x, (double) y); 5010710Sddmitriev} 5110710Sddmitriev#endif 5210710Sddmitriev 5310710Sddmitriev 5410710Sddmitriev#ifndef HAVE_COSF 5510710Sddmitrievfloat 5610710Sddmitrievcosf(float x) 5710710Sddmitriev{ 5810710Sddmitriev return (float) cos(x); 5910710Sddmitriev} 6010710Sddmitriev#endif 6110710Sddmitriev 6210710Sddmitriev#ifndef HAVE_COSL 6310710Sddmitrievlong double 6410710Sddmitrievcosl(long double x) 6510710Sddmitriev{ 6610710Sddmitriev return cos((double) x); 6710710Sddmitriev} 6810710Sddmitriev#endif 6910710Sddmitriev 7010710Sddmitriev 7110710Sddmitriev#ifndef HAVE_COSHF 7210710Sddmitrievfloat 7310710Sddmitrievcoshf(float x) 7410710Sddmitriev{ 7510710Sddmitriev return (float) cosh(x); 7610710Sddmitriev} 7710710Sddmitriev#endif 7810710Sddmitriev 7910710Sddmitriev#ifndef HAVE_COSHL 8010710Sddmitrievlong double 8110710Sddmitrievcoshl(long double x) 8210710Sddmitriev{ 8310710Sddmitriev return cosh((double) x); 8410710Sddmitriev} 8510710Sddmitriev#endif 8610710Sddmitriev 8710710Sddmitriev 8810710Sddmitriev#ifndef HAVE_EXPF 8910710Sddmitrievfloat 9010710Sddmitrievexpf(float x) 9110710Sddmitriev{ 9210710Sddmitriev return (float) exp(x); 9310710Sddmitriev} 9410710Sddmitriev#endif 9510710Sddmitriev 9610710Sddmitriev#ifndef HAVE_EXPL 9710710Sddmitrievlong double 9810710Sddmitrievexpl(long double x) 9910710Sddmitriev{ 10010710Sddmitriev return exp((double) x); 10110710Sddmitriev} 10210710Sddmitriev#endif 10310710Sddmitriev 10410710Sddmitriev 10510710Sddmitriev/* Compute the hypothenuse of a right triangle with side x and y. */ 10610710Sddmitriev#ifndef HAVE_HYPOTF 10710710Sddmitrievfloat 10810710Sddmitrievhypotf(float x, float y) 10910710Sddmitriev{ 11010710Sddmitriev float s = fabsf(x) + fabsf(y); 11110710Sddmitriev if (s == 0.0F) 11210710Sddmitriev return s; 11310710Sddmitriev x /= s; y /= s; 11410710Sddmitriev return s * sqrtf(x * x + y * y); 11510710Sddmitriev} 11610710Sddmitriev#endif 11710710Sddmitriev 11810710Sddmitriev#ifndef HAVE_HYPOT 11910710Sddmitrievdouble 12010710Sddmitrievhypot(double x, double y) 12110710Sddmitriev{ 12210710Sddmitriev double s = fabs(x) + fabs(y); 12310710Sddmitriev if (s == 0.0) 12410710Sddmitriev return s; 12510710Sddmitriev x /= s; y /= s; 12610710Sddmitriev return s * sqrt(x * x + y * y); 12710710Sddmitriev} 12810710Sddmitriev#endif 12910710Sddmitriev 13010710Sddmitriev#ifndef HAVE_HYPOTL 13110710Sddmitrievlong double 13210710Sddmitrievhypotl(long double x, long double y) 13310710Sddmitriev{ 13410710Sddmitriev long double s = fabsl(x) + fabsl(y); 13510710Sddmitriev if (s == 0.0L) 13610710Sddmitriev return s; 13710710Sddmitriev x /= s; y /= s; 13810710Sddmitriev return s * sqrtl(x * x + y * y); 13910710Sddmitriev} 14010710Sddmitriev#endif 14110710Sddmitriev 14210710Sddmitriev 14310710Sddmitriev 14410710Sddmitriev#ifndef HAVE_LOGF 14510710Sddmitrievfloat 14610710Sddmitrievlogf(float x) 14710710Sddmitriev{ 14810710Sddmitriev return (float) log(x); 14910710Sddmitriev} 15010710Sddmitriev#endif 15110710Sddmitriev 15210710Sddmitriev#ifndef HAVE_LOGL 15310710Sddmitrievlong double 15410710Sddmitrievlogl(long double x) 15510710Sddmitriev{ 15610710Sddmitriev return log((double) x); 15710710Sddmitriev} 15810710Sddmitriev#endif 15910710Sddmitriev 16010710Sddmitriev 16110710Sddmitriev#ifndef HAVE_LOG10F 16210710Sddmitrievfloat 16310710Sddmitrievlog10f(float x) 16410710Sddmitriev{ 16510710Sddmitriev return (float) log10(x); 16610710Sddmitriev} 16710710Sddmitriev#endif 168 169#ifndef HAVE_LOG10L 170long double 171log10l(long double x) 172{ 173 return log10((double) x); 174} 175#endif 176 177 178#ifndef HAVE_POWF 179float 180powf(float x, float y) 181{ 182 return (float) pow(x, y); 183} 184#endif 185 186#ifndef HAVE_POWL 187long double 188powl(long double x, long double y) 189{ 190 return pow((double) x, (double) y); 191} 192#endif 193 194 195#ifndef HAVE_SINF 196float 197sinf(float x) 198{ 199 return (float) sin(x); 200} 201#endif 202 203#ifndef HAVE_SINL 204long double 205sinl(long double x) 206{ 207 return sin((double) x); 208} 209#endif 210 211 212#ifndef HAVE_SINHF 213float 214sinhf(float x) 215{ 216 return (float) sinh(x); 217} 218#endif 219 220#ifndef HAVE_SINHL 221long double 222sinhl(long double x) 223{ 224 return sinh((double) x); 225} 226#endif 227 228 229#ifndef HAVE_SQRTF 230float 231sqrtf(float x) 232{ 233 return (float) sqrt(x); 234} 235#endif 236 237#ifndef HAVE_SQRTL 238long double 239sqrtl(long double x) 240{ 241 return sqrt((double) x); 242} 243#endif 244 245 246#ifndef HAVE_TANF 247float 248tanf(float x) 249{ 250 return (float) tan(x); 251} 252#endif 253 254#ifndef HAVE_TANL 255long double 256tanl(long double x) 257{ 258 return tan((double) x); 259} 260#endif 261 262 263#ifndef HAVE_TANHF 264float 265tanhf(float x) 266{ 267 return (float) tanh(x); 268} 269#endif 270 271#ifndef HAVE_TANHL 272long double 273tanhl(long double x) 274{ 275 return tanh((double) x); 276} 277#endif 278