std_cmath.h revision 169691
1288943Sdim// -*- C++ -*- C forwarding header. 2249259Sdim 3353358Sdim// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 4353358Sdim// Free Software Foundation, Inc. 5353358Sdim// 6249259Sdim// This file is part of the GNU ISO C++ Library. This library is free 7249259Sdim// software; you can redistribute it and/or modify it under the 8249259Sdim// terms of the GNU General Public License as published by the 9249259Sdim// Free Software Foundation; either version 2, or (at your option) 10249259Sdim// any later version. 11249259Sdim 12249259Sdim// This library is distributed in the hope that it will be useful, 13249259Sdim// but WITHOUT ANY WARRANTY; without even the implied warranty of 14249259Sdim// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15249259Sdim// GNU General Public License for more details. 16249259Sdim 17249259Sdim// You should have received a copy of the GNU General Public License along 18249259Sdim// with this library; see the file COPYING. If not, write to the Free 19280031Sdim// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 20314564Sdim// USA. 21314564Sdim 22296417Sdim// As a special exception, you may use this file as part of a free software 23321369Sdim// library without restriction. Specifically, if other files instantiate 24314564Sdim// templates or use macros or inline functions from this file, or you compile 25360784Sdim// this file and link it with other files to produce an executable, this 26314564Sdim// file does not by itself cause the resulting executable to be covered by 27321369Sdim// the GNU General Public License. This exception does not however 28321369Sdim// invalidate any other reasons why the executable file might be covered by 29280031Sdim// the GNU General Public License. 30296417Sdim 31249259Sdim/** @file include/cmath 32321369Sdim * This is a Standard C++ Library file. You should @c #include this file 33314564Sdim * in your programs, rather than any of the "*.h" implementation files. 34280031Sdim * 35314564Sdim * This is the C++ version of the Standard C Library header @c math.h, 36314564Sdim * and its contents are (mostly) the same as that header, but are all 37314564Sdim * contained in the namespace @c std (except for names which are defined 38314564Sdim * as macros in C). 39314564Sdim */ 40314564Sdim 41280031Sdim// 42314564Sdim// ISO C++ 14882: 26.5 C library 43249259Sdim// 44249259Sdim 45288943Sdim#ifndef _GLIBCXX_CMATH 46249259Sdim#define _GLIBCXX_CMATH 1 47288943Sdim 48321369Sdim#pragma GCC system_header 49321369Sdim 50288943Sdim#include <bits/c++config.h> 51276479Sdim#include <bits/cpp_type_traits.h> 52288943Sdim#include <ext/type_traits.h> 53261991Sdim 54261991Sdim#include <math.h> 55341825Sdim 56280031Sdim// Get rid of those macros defined in <math.h> in lieu of real functions. 57280031Sdim#undef abs 58280031Sdim#undef div 59280031Sdim#undef acos 60280031Sdim#undef asin 61341825Sdim#undef atan 62280031Sdim#undef atan2 63280031Sdim#undef ceil 64280031Sdim#undef cos 65341825Sdim#undef cosh 66288943Sdim#undef exp 67288943Sdim#undef fabs 68341825Sdim#undef floor 69344779Sdim#undef fmod 70280031Sdim#undef frexp 71280031Sdim#undef ldexp 72344779Sdim#undef log 73344779Sdim#undef log10 74321369Sdim#undef modf 75321369Sdim#undef pow 76280031Sdim#undef sin 77280031Sdim#undef sinh 78280031Sdim#undef sqrt 79309124Sdim#undef tan 80309124Sdim#undef tanh 81280031Sdim 82280031Sdim_GLIBCXX_BEGIN_NAMESPACE(std) 83280031Sdim 84288943Sdim // Forward declaration of a helper function. This really should be 85344779Sdim // an `exported' forward declaration. 86321369Sdim template<typename _Tp> _Tp __cmath_power(_Tp, unsigned int); 87288943Sdim 88314564Sdim inline double 89288943Sdim abs(double __x) 90280031Sdim { return __builtin_fabs(__x); } 91341825Sdim 92280031Sdim inline float 93280031Sdim abs(float __x) 94280031Sdim { return __builtin_fabsf(__x); } 95280031Sdim 96280031Sdim inline long double 97280031Sdim abs(long double __x) 98280031Sdim { return __builtin_fabsl(__x); } 99280031Sdim 100280031Sdim using ::acos; 101280031Sdim 102341825Sdim inline float 103288943Sdim acos(float __x) 104288943Sdim { return __builtin_acosf(__x); } 105288943Sdim 106288943Sdim inline long double 107288943Sdim acos(long double __x) 108288943Sdim { return __builtin_acosl(__x); } 109288943Sdim 110288943Sdim template<typename _Tp> 111280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 112288943Sdim double>::__type 113288943Sdim acos(_Tp __x) 114288943Sdim { return __builtin_acos(__x); } 115341825Sdim 116288943Sdim using ::asin; 117288943Sdim 118288943Sdim inline float 119288943Sdim asin(float __x) 120288943Sdim { return __builtin_asinf(__x); } 121288943Sdim 122296417Sdim inline long double 123296417Sdim asin(long double __x) 124296417Sdim { return __builtin_asinl(__x); } 125296417Sdim 126288943Sdim template<typename _Tp> 127288943Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 128341825Sdim double>::__type 129288943Sdim asin(_Tp __x) 130288943Sdim { return __builtin_asin(__x); } 131288943Sdim 132288943Sdim using ::atan; 133288943Sdim 134288943Sdim inline float 135288943Sdim atan(float __x) 136288943Sdim { return __builtin_atanf(__x); } 137280031Sdim 138288943Sdim inline long double 139280031Sdim atan(long double __x) 140280031Sdim { return __builtin_atanl(__x); } 141321369Sdim 142321369Sdim template<typename _Tp> 143321369Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 144321369Sdim double>::__type 145321369Sdim atan(_Tp __x) 146321369Sdim { return __builtin_atan(__x); } 147321369Sdim 148321369Sdim using ::atan2; 149280031Sdim 150280031Sdim inline float 151280031Sdim atan2(float __y, float __x) 152288943Sdim { return __builtin_atan2f(__y, __x); } 153288943Sdim 154288943Sdim inline long double 155288943Sdim atan2(long double __y, long double __x) 156288943Sdim { return __builtin_atan2l(__y, __x); } 157288943Sdim 158288943Sdim template<typename _Tp, typename _Up> 159288943Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value 160288943Sdim && __is_integer<_Up>::__value, 161288943Sdim double>::__type 162280031Sdim atan2(_Tp __y, _Up __x) 163280031Sdim { return __builtin_atan2(__y, __x); } 164280031Sdim 165280031Sdim using ::ceil; 166280031Sdim 167341825Sdim inline float 168280031Sdim ceil(float __x) 169280031Sdim { return __builtin_ceilf(__x); } 170280031Sdim 171280031Sdim inline long double 172280031Sdim ceil(long double __x) 173280031Sdim { return __builtin_ceill(__x); } 174280031Sdim 175280031Sdim template<typename _Tp> 176280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 177280031Sdim double>::__type 178280031Sdim ceil(_Tp __x) 179280031Sdim { return __builtin_ceil(__x); } 180280031Sdim 181280031Sdim using ::cos; 182341825Sdim 183280031Sdim inline float 184280031Sdim cos(float __x) 185280031Sdim { return __builtin_cosf(__x); } 186321369Sdim 187321369Sdim inline long double 188280031Sdim cos(long double __x) 189280031Sdim { return __builtin_cosl(__x); } 190321369Sdim 191280031Sdim template<typename _Tp> 192280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 193280031Sdim double>::__type 194280031Sdim cos(_Tp __x) 195280031Sdim { return __builtin_cos(__x); } 196280031Sdim 197280031Sdim using ::cosh; 198280031Sdim 199280031Sdim inline float 200280031Sdim cosh(float __x) 201280031Sdim { return __builtin_coshf(__x); } 202280031Sdim 203341825Sdim inline long double 204296417Sdim cosh(long double __x) 205296417Sdim { return __builtin_coshl(__x); } 206296417Sdim 207296417Sdim template<typename _Tp> 208296417Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 209296417Sdim double>::__type 210296417Sdim cosh(_Tp __x) 211296417Sdim { return __builtin_cosh(__x); } 212341825Sdim 213296417Sdim using ::exp; 214296417Sdim 215296417Sdim inline float 216296417Sdim exp(float __x) 217296417Sdim { return __builtin_expf(__x); } 218296417Sdim 219296417Sdim inline long double 220296417Sdim exp(long double __x) 221296417Sdim { return __builtin_expl(__x); } 222296417Sdim 223296417Sdim template<typename _Tp> 224296417Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 225341825Sdim double>::__type 226296417Sdim exp(_Tp __x) 227296417Sdim { return __builtin_exp(__x); } 228296417Sdim 229296417Sdim using ::fabs; 230296417Sdim 231296417Sdim inline float 232296417Sdim fabs(float __x) 233296417Sdim { return __builtin_fabsf(__x); } 234341825Sdim 235296417Sdim inline long double 236296417Sdim fabs(long double __x) 237296417Sdim { return __builtin_fabsl(__x); } 238296417Sdim 239296417Sdim template<typename _Tp> 240296417Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 241296417Sdim double>::__type 242296417Sdim fabs(_Tp __x) 243341825Sdim { return __builtin_fabs(__x); } 244296417Sdim 245296417Sdim using ::floor; 246296417Sdim 247296417Sdim inline float 248296417Sdim floor(float __x) 249341825Sdim { return __builtin_floorf(__x); } 250296417Sdim 251296417Sdim inline long double 252296417Sdim floor(long double __x) 253296417Sdim { return __builtin_floorl(__x); } 254296417Sdim 255296417Sdim template<typename _Tp> 256296417Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 257296417Sdim double>::__type 258296417Sdim floor(_Tp __x) 259296417Sdim { return __builtin_floor(__x); } 260296417Sdim 261296417Sdim using ::fmod; 262341825Sdim 263296417Sdim inline float 264296417Sdim fmod(float __x, float __y) 265321369Sdim { return __builtin_fmodf(__x, __y); } 266296417Sdim 267296417Sdim inline long double 268341825Sdim fmod(long double __x, long double __y) 269296417Sdim { return __builtin_fmodl(__x, __y); } 270296417Sdim 271296417Sdim using ::frexp; 272296417Sdim 273296417Sdim inline float 274341825Sdim frexp(float __x, int* __exp) 275280031Sdim { return __builtin_frexpf(__x, __exp); } 276280031Sdim 277280031Sdim inline long double 278280031Sdim frexp(long double __x, int* __exp) 279280031Sdim { return __builtin_frexpl(__x, __exp); } 280280031Sdim 281280031Sdim template<typename _Tp> 282280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 283321369Sdim double>::__type 284280031Sdim frexp(_Tp __x, int* __exp) 285280031Sdim { return __builtin_frexp(__x, __exp); } 286288943Sdim 287321369Sdim using ::ldexp; 288280031Sdim 289280031Sdim inline float 290280031Sdim ldexp(float __x, int __exp) 291321369Sdim { return __builtin_ldexpf(__x, __exp); } 292314564Sdim 293280031Sdim inline long double 294280031Sdim ldexp(long double __x, int __exp) 295280031Sdim { return __builtin_ldexpl(__x, __exp); } 296280031Sdim 297288943Sdim template<typename _Tp> 298288943Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 299341825Sdim double>::__type 300280031Sdim ldexp(_Tp __x, int __exp) 301280031Sdim { return __builtin_ldexp(__x, __exp); } 302280031Sdim 303280031Sdim using ::log; 304341825Sdim 305280031Sdim inline float 306280031Sdim log(float __x) 307288943Sdim { return __builtin_logf(__x); } 308288943Sdim 309280031Sdim inline long double 310280031Sdim log(long double __x) 311280031Sdim { return __builtin_logl(__x); } 312280031Sdim 313280031Sdim template<typename _Tp> 314280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 315280031Sdim double>::__type 316309124Sdim log(_Tp __x) 317309124Sdim { return __builtin_log(__x); } 318309124Sdim 319309124Sdim using ::log10; 320309124Sdim 321309124Sdim inline float 322309124Sdim log10(float __x) 323309124Sdim { return __builtin_log10f(__x); } 324309124Sdim 325309124Sdim inline long double 326309124Sdim log10(long double __x) 327309124Sdim { return __builtin_log10l(__x); } 328309124Sdim 329280031Sdim template<typename _Tp> 330280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 331341825Sdim double>::__type 332280031Sdim log10(_Tp __x) 333280031Sdim { return __builtin_log10(__x); } 334280031Sdim 335280031Sdim using ::modf; 336280031Sdim 337280031Sdim inline float 338280031Sdim modf(float __x, float* __iptr) 339280031Sdim { return __builtin_modff(__x, __iptr); } 340280031Sdim 341280031Sdim inline long double 342280031Sdim modf(long double __x, long double* __iptr) 343280031Sdim { return __builtin_modfl(__x, __iptr); } 344280031Sdim 345341825Sdim template<typename _Tp> 346280031Sdim inline _Tp 347280031Sdim __pow_helper(_Tp __x, int __n) 348280031Sdim { 349280031Sdim return __n < 0 350280031Sdim ? _Tp(1)/__cmath_power(__x, -__n) 351280031Sdim : __cmath_power(__x, __n); 352288943Sdim } 353280031Sdim 354280031Sdim using ::pow; 355314564Sdim 356288943Sdim inline float 357280031Sdim pow(float __x, float __y) 358280031Sdim { return __builtin_powf(__x, __y); } 359280031Sdim 360321369Sdim inline long double 361280031Sdim pow(long double __x, long double __y) 362280031Sdim { return __builtin_powl(__x, __y); } 363280031Sdim 364321369Sdim inline double 365280031Sdim pow(double __x, int __i) 366280031Sdim { return __builtin_powi(__x, __i); } 367280031Sdim 368280031Sdim inline float 369280031Sdim pow(float __x, int __n) 370321369Sdim { return __builtin_powif(__x, __n); } 371280031Sdim 372280031Sdim inline long double 373280031Sdim pow(long double __x, int __n) 374321369Sdim { return __builtin_powil(__x, __n); } 375280031Sdim 376280031Sdim using ::sin; 377280031Sdim 378280031Sdim inline float 379280031Sdim sin(float __x) 380280031Sdim { return __builtin_sinf(__x); } 381280031Sdim 382280031Sdim inline long double 383280031Sdim sin(long double __x) 384280031Sdim { return __builtin_sinl(__x); } 385280031Sdim 386280031Sdim template<typename _Tp> 387341825Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 388280031Sdim double>::__type 389280031Sdim sin(_Tp __x) 390280031Sdim { return __builtin_sin(__x); } 391280031Sdim 392280031Sdim using ::sinh; 393280031Sdim 394280031Sdim inline float 395280031Sdim sinh(float __x) 396280031Sdim { return __builtin_sinhf(__x); } 397280031Sdim 398280031Sdim inline long double 399280031Sdim sinh(long double __x) 400280031Sdim { return __builtin_sinhl(__x); } 401280031Sdim 402280031Sdim template<typename _Tp> 403280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 404280031Sdim double>::__type 405280031Sdim sinh(_Tp __x) 406280031Sdim { return __builtin_sinh(__x); } 407280031Sdim 408280031Sdim using ::sqrt; 409280031Sdim 410280031Sdim inline float 411280031Sdim sqrt(float __x) 412280031Sdim { return __builtin_sqrtf(__x); } 413314564Sdim 414280031Sdim inline long double 415280031Sdim sqrt(long double __x) 416280031Sdim { return __builtin_sqrtl(__x); } 417280031Sdim 418280031Sdim template<typename _Tp> 419280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 420280031Sdim double>::__type 421280031Sdim sqrt(_Tp __x) 422280031Sdim { return __builtin_sqrt(__x); } 423280031Sdim 424280031Sdim using ::tan; 425280031Sdim 426280031Sdim inline float 427280031Sdim tan(float __x) 428280031Sdim { return __builtin_tanf(__x); } 429280031Sdim 430280031Sdim inline long double 431280031Sdim tan(long double __x) 432280031Sdim { return __builtin_tanl(__x); } 433280031Sdim 434280031Sdim template<typename _Tp> 435280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 436280031Sdim double>::__type 437280031Sdim tan(_Tp __x) 438280031Sdim { return __builtin_tan(__x); } 439314564Sdim 440280031Sdim using ::tanh; 441280031Sdim 442280031Sdim inline float 443280031Sdim tanh(float __x) 444280031Sdim { return __builtin_tanhf(__x); } 445280031Sdim 446280031Sdim inline long double 447280031Sdim tanh(long double __x) 448280031Sdim { return __builtin_tanhl(__x); } 449341825Sdim 450280031Sdim template<typename _Tp> 451280031Sdim inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, 452280031Sdim double>::__type 453280031Sdim tanh(_Tp __x) 454280031Sdim { return __builtin_tanh(__x); } 455280031Sdim 456280031Sdim_GLIBCXX_END_NAMESPACE 457280031Sdim 458280031Sdim#if _GLIBCXX_USE_C99_MATH 459280031Sdim#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 460280031Sdim// These are possible macros imported from C99-land. For strict 461280031Sdim// conformance, remove possible C99-injected names from the global 462280031Sdim// namespace, and sequester them in the __gnu_cxx extension namespace. 463280031Sdim 464280031Sdim_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) 465280031Sdim 466280031Sdim template<typename _Tp> 467280031Sdim inline int 468280031Sdim __capture_fpclassify(_Tp __f) { return fpclassify(__f); } 469280031Sdim 470280031Sdim template<typename _Tp> 471280031Sdim inline int 472280031Sdim __capture_isfinite(_Tp __f) { return isfinite(__f); } 473280031Sdim 474280031Sdim template<typename _Tp> 475280031Sdim inline int 476280031Sdim __capture_isinf(_Tp __f) { return isinf(__f); } 477280031Sdim 478280031Sdim template<typename _Tp> 479280031Sdim inline int 480280031Sdim __capture_isnan(_Tp __f) { return isnan(__f); } 481280031Sdim 482280031Sdim template<typename _Tp> 483280031Sdim inline int 484280031Sdim __capture_isnormal(_Tp __f) { return isnormal(__f); } 485280031Sdim 486280031Sdim template<typename _Tp> 487280031Sdim inline int 488280031Sdim __capture_signbit(_Tp __f) { return signbit(__f); } 489280031Sdim 490280031Sdim template<typename _Tp> 491280031Sdim inline int 492280031Sdim __capture_isgreater(_Tp __f1, _Tp __f2) 493280031Sdim { return isgreater(__f1, __f2); } 494280031Sdim 495280031Sdim template<typename _Tp> 496280031Sdim inline int 497280031Sdim __capture_isgreaterequal(_Tp __f1, _Tp __f2) 498280031Sdim { return isgreaterequal(__f1, __f2); } 499280031Sdim 500314564Sdim template<typename _Tp> 501280031Sdim inline int 502280031Sdim __capture_isless(_Tp __f1, _Tp __f2) { return isless(__f1, __f2); } 503321369Sdim 504321369Sdim template<typename _Tp> 505280031Sdim inline int 506280031Sdim __capture_islessequal(_Tp __f1, _Tp __f2) 507280031Sdim { return islessequal(__f1, __f2); } 508280031Sdim 509280031Sdim template<typename _Tp> 510280031Sdim inline int 511280031Sdim __capture_islessgreater(_Tp __f1, _Tp __f2) 512280031Sdim { return islessgreater(__f1, __f2); } 513280031Sdim 514280031Sdim template<typename _Tp> 515280031Sdim inline int 516280031Sdim __capture_isunordered(_Tp __f1, _Tp __f2) 517280031Sdim { return isunordered(__f1, __f2); } 518280031Sdim 519280031Sdim_GLIBCXX_END_NAMESPACE 520280031Sdim 521280031Sdim// Only undefine the C99 FP macros, if actually captured for namespace movement 522314564Sdim#undef fpclassify 523280031Sdim#undef isfinite 524280031Sdim#undef isinf 525341825Sdim#undef isnan 526280031Sdim#undef isnormal 527280031Sdim#undef signbit 528280031Sdim#undef isgreater 529280031Sdim#undef isgreaterequal 530280031Sdim#undef isless 531280031Sdim#undef islessequal 532280031Sdim#undef islessgreater 533280031Sdim#undef isunordered 534280031Sdim 535280031Sdim_GLIBCXX_BEGIN_NAMESPACE(std) 536280031Sdim 537280031Sdim template<typename _Tp> 538280031Sdim inline int 539280031Sdim fpclassify(_Tp __f) { return ::__gnu_cxx::__capture_fpclassify(__f); } 540280031Sdim 541280031Sdim template<typename _Tp> 542280031Sdim inline int 543280031Sdim isfinite(_Tp __f) { return ::__gnu_cxx::__capture_isfinite(__f); } 544341825Sdim 545280031Sdim template<typename _Tp> 546280031Sdim inline int 547280031Sdim isinf(_Tp __f) { return ::__gnu_cxx::__capture_isinf(__f); } 548280031Sdim 549280031Sdim template<typename _Tp> 550280031Sdim inline int 551280031Sdim isnan(_Tp __f) { return ::__gnu_cxx::__capture_isnan(__f); } 552280031Sdim 553280031Sdim template<typename _Tp> 554280031Sdim inline int 555280031Sdim isnormal(_Tp __f) { return ::__gnu_cxx::__capture_isnormal(__f); } 556280031Sdim 557280031Sdim template<typename _Tp> 558280031Sdim inline int 559341825Sdim signbit(_Tp __f) { return ::__gnu_cxx::__capture_signbit(__f); } 560280031Sdim 561280031Sdim template<typename _Tp> 562280031Sdim inline int 563280031Sdim isgreater(_Tp __f1, _Tp __f2) 564280031Sdim { return ::__gnu_cxx::__capture_isgreater(__f1, __f2); } 565280031Sdim 566280031Sdim template<typename _Tp> 567280031Sdim inline int 568280031Sdim isgreaterequal(_Tp __f1, _Tp __f2) 569280031Sdim { return ::__gnu_cxx::__capture_isgreaterequal(__f1, __f2); } 570280031Sdim 571341825Sdim template<typename _Tp> 572280031Sdim inline int 573280031Sdim isless(_Tp __f1, _Tp __f2) 574280031Sdim { return ::__gnu_cxx::__capture_isless(__f1, __f2); } 575280031Sdim 576280031Sdim template<typename _Tp> 577280031Sdim inline int 578280031Sdim islessequal(_Tp __f1, _Tp __f2) 579280031Sdim { return ::__gnu_cxx::__capture_islessequal(__f1, __f2); } 580280031Sdim 581280031Sdim template<typename _Tp> 582280031Sdim inline int 583280031Sdim islessgreater(_Tp __f1, _Tp __f2) 584341825Sdim { return ::__gnu_cxx::__capture_islessgreater(__f1, __f2); } 585280031Sdim 586280031Sdim template<typename _Tp> 587280031Sdim inline int 588280031Sdim isunordered(_Tp __f1, _Tp __f2) 589280031Sdim { return ::__gnu_cxx::__capture_isunordered(__f1, __f2); } 590280031Sdim 591280031Sdim_GLIBCXX_END_NAMESPACE 592280031Sdim 593280031Sdim#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */ 594280031Sdim#endif 595280031Sdim 596280031Sdim#ifndef _GLIBCXX_EXPORT_TEMPLATE 597280031Sdim# include <bits/cmath.tcc> 598280031Sdim#endif 599249259Sdim 600341825Sdim#endif 601280031Sdim