libstdc++
|
00001 // TR1 cmath -*- C++ -*- 00002 00003 // Copyright (C) 2007, 2009 Free Software Foundation, Inc. 00004 // 00005 // This file is part of the GNU ISO C++ Library. This library is free 00006 // software; you can redistribute it and/or modify it under the 00007 // terms of the GNU General Public License as published by the 00008 // Free Software Foundation; either version 3, or (at your option) 00009 // any later version. 00010 00011 // This library is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 00016 // Under Section 7 of GPL version 3, you are granted additional 00017 // permissions described in the GCC Runtime Library Exception, version 00018 // 3.1, as published by the Free Software Foundation. 00019 00020 // You should have received a copy of the GNU General Public License and 00021 // a copy of the GCC Runtime Library Exception along with this program; 00022 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 00023 // <http://www.gnu.org/licenses/>. 00024 00025 /** @file tr1_impl/cmath 00026 * This is an internal header file, included by other library headers. 00027 * You should not attempt to use it directly. 00028 */ 00029 00030 #if _GLIBCXX_USE_C99_MATH_TR1 00031 00032 #undef acosh 00033 #undef acoshf 00034 #undef acoshl 00035 #undef asinh 00036 #undef asinhf 00037 #undef asinhl 00038 #undef atanh 00039 #undef atanhf 00040 #undef atanhl 00041 #undef cbrt 00042 #undef cbrtf 00043 #undef cbrtl 00044 #undef copysign 00045 #undef copysignf 00046 #undef copysignl 00047 #undef erf 00048 #undef erff 00049 #undef erfl 00050 #undef erfc 00051 #undef erfcf 00052 #undef erfcl 00053 #undef exp2 00054 #undef exp2f 00055 #undef exp2l 00056 #undef expm1 00057 #undef expm1f 00058 #undef expm1l 00059 #undef fdim 00060 #undef fdimf 00061 #undef fdiml 00062 #undef fma 00063 #undef fmaf 00064 #undef fmal 00065 #undef fmax 00066 #undef fmaxf 00067 #undef fmaxl 00068 #undef fmin 00069 #undef fminf 00070 #undef fminl 00071 #undef hypot 00072 #undef hypotf 00073 #undef hypotl 00074 #undef ilogb 00075 #undef ilogbf 00076 #undef ilogbl 00077 #undef lgamma 00078 #undef lgammaf 00079 #undef lgammal 00080 #undef llrint 00081 #undef llrintf 00082 #undef llrintl 00083 #undef llround 00084 #undef llroundf 00085 #undef llroundl 00086 #undef log1p 00087 #undef log1pf 00088 #undef log1pl 00089 #undef log2 00090 #undef log2f 00091 #undef log2l 00092 #undef logb 00093 #undef logbf 00094 #undef logbl 00095 #undef lrint 00096 #undef lrintf 00097 #undef lrintl 00098 #undef lround 00099 #undef lroundf 00100 #undef lroundl 00101 #undef nan 00102 #undef nanf 00103 #undef nanl 00104 #undef nearbyint 00105 #undef nearbyintf 00106 #undef nearbyintl 00107 #undef nextafter 00108 #undef nextafterf 00109 #undef nextafterl 00110 #undef nexttoward 00111 #undef nexttowardf 00112 #undef nexttowardl 00113 #undef remainder 00114 #undef remainderf 00115 #undef remainderl 00116 #undef remquo 00117 #undef remquof 00118 #undef remquol 00119 #undef rint 00120 #undef rintf 00121 #undef rintl 00122 #undef round 00123 #undef roundf 00124 #undef roundl 00125 #undef scalbln 00126 #undef scalblnf 00127 #undef scalblnl 00128 #undef scalbn 00129 #undef scalbnf 00130 #undef scalbnl 00131 #undef tgamma 00132 #undef tgammaf 00133 #undef tgammal 00134 #undef trunc 00135 #undef truncf 00136 #undef truncl 00137 00138 #endif 00139 00140 namespace std 00141 { 00142 _GLIBCXX_BEGIN_NAMESPACE_TR1 00143 00144 #if _GLIBCXX_USE_C99_MATH_TR1 00145 00146 // types 00147 using ::double_t; 00148 using ::float_t; 00149 00150 // functions 00151 using ::acosh; 00152 using ::acoshf; 00153 using ::acoshl; 00154 00155 using ::asinh; 00156 using ::asinhf; 00157 using ::asinhl; 00158 00159 using ::atanh; 00160 using ::atanhf; 00161 using ::atanhl; 00162 00163 using ::cbrt; 00164 using ::cbrtf; 00165 using ::cbrtl; 00166 00167 using ::copysign; 00168 using ::copysignf; 00169 using ::copysignl; 00170 00171 using ::erf; 00172 using ::erff; 00173 using ::erfl; 00174 00175 using ::erfc; 00176 using ::erfcf; 00177 using ::erfcl; 00178 00179 using ::exp2; 00180 using ::exp2f; 00181 using ::exp2l; 00182 00183 using ::expm1; 00184 using ::expm1f; 00185 using ::expm1l; 00186 00187 using ::fdim; 00188 using ::fdimf; 00189 using ::fdiml; 00190 00191 using ::fma; 00192 using ::fmaf; 00193 using ::fmal; 00194 00195 using ::fmax; 00196 using ::fmaxf; 00197 using ::fmaxl; 00198 00199 using ::fmin; 00200 using ::fminf; 00201 using ::fminl; 00202 00203 using ::hypot; 00204 using ::hypotf; 00205 using ::hypotl; 00206 00207 using ::ilogb; 00208 using ::ilogbf; 00209 using ::ilogbl; 00210 00211 using ::lgamma; 00212 using ::lgammaf; 00213 using ::lgammal; 00214 00215 using ::llrint; 00216 using ::llrintf; 00217 using ::llrintl; 00218 00219 using ::llround; 00220 using ::llroundf; 00221 using ::llroundl; 00222 00223 using ::log1p; 00224 using ::log1pf; 00225 using ::log1pl; 00226 00227 using ::log2; 00228 using ::log2f; 00229 using ::log2l; 00230 00231 using ::logb; 00232 using ::logbf; 00233 using ::logbl; 00234 00235 using ::lrint; 00236 using ::lrintf; 00237 using ::lrintl; 00238 00239 using ::lround; 00240 using ::lroundf; 00241 using ::lroundl; 00242 00243 using ::nan; 00244 using ::nanf; 00245 using ::nanl; 00246 00247 using ::nearbyint; 00248 using ::nearbyintf; 00249 using ::nearbyintl; 00250 00251 using ::nextafter; 00252 using ::nextafterf; 00253 using ::nextafterl; 00254 00255 using ::nexttoward; 00256 using ::nexttowardf; 00257 using ::nexttowardl; 00258 00259 using ::remainder; 00260 using ::remainderf; 00261 using ::remainderl; 00262 00263 using ::remquo; 00264 using ::remquof; 00265 using ::remquol; 00266 00267 using ::rint; 00268 using ::rintf; 00269 using ::rintl; 00270 00271 using ::round; 00272 using ::roundf; 00273 using ::roundl; 00274 00275 using ::scalbln; 00276 using ::scalblnf; 00277 using ::scalblnl; 00278 00279 using ::scalbn; 00280 using ::scalbnf; 00281 using ::scalbnl; 00282 00283 using ::tgamma; 00284 using ::tgammaf; 00285 using ::tgammal; 00286 00287 using ::trunc; 00288 using ::truncf; 00289 using ::truncl; 00290 00291 #endif 00292 00293 #if _GLIBCXX_USE_C99_MATH 00294 #if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 00295 00296 /// Function template definitions [8.16.3]. 00297 using std::signbit; 00298 00299 using std::fpclassify; 00300 00301 using std::isfinite; 00302 using std::isinf; 00303 using std::isnan; 00304 using std::isnormal; 00305 00306 using std::isgreater; 00307 using std::isgreaterequal; 00308 using std::isless; 00309 using std::islessequal; 00310 using std::islessgreater; 00311 using std::isunordered; 00312 #endif 00313 #endif 00314 00315 #if _GLIBCXX_USE_C99_MATH_TR1 00316 00317 /// Additional overloads [8.16.4]. 00318 using std::acos; 00319 00320 inline float 00321 acosh(float __x) 00322 { return __builtin_acoshf(__x); } 00323 00324 inline long double 00325 acosh(long double __x) 00326 { return __builtin_acoshl(__x); } 00327 00328 template<typename _Tp> 00329 inline typename __gnu_cxx::__promote<_Tp>::__type 00330 acosh(_Tp __x) 00331 { 00332 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00333 return acosh(__type(__x)); 00334 } 00335 00336 using std::asin; 00337 00338 inline float 00339 asinh(float __x) 00340 { return __builtin_asinhf(__x); } 00341 00342 inline long double 00343 asinh(long double __x) 00344 { return __builtin_asinhl(__x); } 00345 00346 template<typename _Tp> 00347 inline typename __gnu_cxx::__promote<_Tp>::__type 00348 asinh(_Tp __x) 00349 { 00350 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00351 return asinh(__type(__x)); 00352 } 00353 00354 using std::atan; 00355 using std::atan2; 00356 00357 inline float 00358 atanh(float __x) 00359 { return __builtin_atanhf(__x); } 00360 00361 inline long double 00362 atanh(long double __x) 00363 { return __builtin_atanhl(__x); } 00364 00365 template<typename _Tp> 00366 inline typename __gnu_cxx::__promote<_Tp>::__type 00367 atanh(_Tp __x) 00368 { 00369 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00370 return atanh(__type(__x)); 00371 } 00372 00373 inline float 00374 cbrt(float __x) 00375 { return __builtin_cbrtf(__x); } 00376 00377 inline long double 00378 cbrt(long double __x) 00379 { return __builtin_cbrtl(__x); } 00380 00381 template<typename _Tp> 00382 inline typename __gnu_cxx::__promote<_Tp>::__type 00383 cbrt(_Tp __x) 00384 { 00385 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00386 return cbrt(__type(__x)); 00387 } 00388 00389 using std::ceil; 00390 00391 inline float 00392 copysign(float __x, float __y) 00393 { return __builtin_copysignf(__x, __y); } 00394 00395 inline long double 00396 copysign(long double __x, long double __y) 00397 { return __builtin_copysignl(__x, __y); } 00398 00399 template<typename _Tp, typename _Up> 00400 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00401 copysign(_Tp __x, _Up __y) 00402 { 00403 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00404 return copysign(__type(__x), __type(__y)); 00405 } 00406 00407 using std::cos; 00408 using std::cosh; 00409 00410 inline float 00411 erf(float __x) 00412 { return __builtin_erff(__x); } 00413 00414 inline long double 00415 erf(long double __x) 00416 { return __builtin_erfl(__x); } 00417 00418 template<typename _Tp> 00419 inline typename __gnu_cxx::__promote<_Tp>::__type 00420 erf(_Tp __x) 00421 { 00422 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00423 return erf(__type(__x)); 00424 } 00425 00426 inline float 00427 erfc(float __x) 00428 { return __builtin_erfcf(__x); } 00429 00430 inline long double 00431 erfc(long double __x) 00432 { return __builtin_erfcl(__x); } 00433 00434 template<typename _Tp> 00435 inline typename __gnu_cxx::__promote<_Tp>::__type 00436 erfc(_Tp __x) 00437 { 00438 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00439 return erfc(__type(__x)); 00440 } 00441 00442 using std::exp; 00443 00444 inline float 00445 exp2(float __x) 00446 { return __builtin_exp2f(__x); } 00447 00448 inline long double 00449 exp2(long double __x) 00450 { return __builtin_exp2l(__x); } 00451 00452 template<typename _Tp> 00453 inline typename __gnu_cxx::__promote<_Tp>::__type 00454 exp2(_Tp __x) 00455 { 00456 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00457 return exp2(__type(__x)); 00458 } 00459 00460 inline float 00461 expm1(float __x) 00462 { return __builtin_expm1f(__x); } 00463 00464 inline long double 00465 expm1(long double __x) 00466 { return __builtin_expm1l(__x); } 00467 00468 template<typename _Tp> 00469 inline typename __gnu_cxx::__promote<_Tp>::__type 00470 expm1(_Tp __x) 00471 { 00472 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00473 return expm1(__type(__x)); 00474 } 00475 00476 using std::fabs; 00477 00478 inline float 00479 fdim(float __x, float __y) 00480 { return __builtin_fdimf(__x, __y); } 00481 00482 inline long double 00483 fdim(long double __x, long double __y) 00484 { return __builtin_fdiml(__x, __y); } 00485 00486 template<typename _Tp, typename _Up> 00487 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00488 fdim(_Tp __x, _Up __y) 00489 { 00490 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00491 return fdim(__type(__x), __type(__y)); 00492 } 00493 00494 using std::floor; 00495 00496 inline float 00497 fma(float __x, float __y, float __z) 00498 { return __builtin_fmaf(__x, __y, __z); } 00499 00500 inline long double 00501 fma(long double __x, long double __y, long double __z) 00502 { return __builtin_fmal(__x, __y, __z); } 00503 00504 template<typename _Tp, typename _Up, typename _Vp> 00505 inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type 00506 fma(_Tp __x, _Up __y, _Vp __z) 00507 { 00508 typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; 00509 return fma(__type(__x), __type(__y), __type(__z)); 00510 } 00511 00512 inline float 00513 fmax(float __x, float __y) 00514 { return __builtin_fmaxf(__x, __y); } 00515 00516 inline long double 00517 fmax(long double __x, long double __y) 00518 { return __builtin_fmaxl(__x, __y); } 00519 00520 template<typename _Tp, typename _Up> 00521 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00522 fmax(_Tp __x, _Up __y) 00523 { 00524 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00525 return fmax(__type(__x), __type(__y)); 00526 } 00527 00528 inline float 00529 fmin(float __x, float __y) 00530 { return __builtin_fminf(__x, __y); } 00531 00532 inline long double 00533 fmin(long double __x, long double __y) 00534 { return __builtin_fminl(__x, __y); } 00535 00536 template<typename _Tp, typename _Up> 00537 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00538 fmin(_Tp __x, _Up __y) 00539 { 00540 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00541 return fmin(__type(__x), __type(__y)); 00542 } 00543 00544 using std::fmod; 00545 using std::frexp; 00546 00547 inline float 00548 hypot(float __x, float __y) 00549 { return __builtin_hypotf(__x, __y); } 00550 00551 inline long double 00552 hypot(long double __x, long double __y) 00553 { return __builtin_hypotl(__x, __y); } 00554 00555 template<typename _Tp, typename _Up> 00556 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00557 hypot(_Tp __x, _Up __y) 00558 { 00559 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00560 return hypot(__type(__x), __type(__y)); 00561 } 00562 00563 inline int 00564 ilogb(float __x) 00565 { return __builtin_ilogbf(__x); } 00566 00567 inline int 00568 ilogb(long double __x) 00569 { return __builtin_ilogbl(__x); } 00570 00571 template<typename _Tp> 00572 inline int 00573 ilogb(_Tp __x) 00574 { 00575 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00576 return ilogb(__type(__x)); 00577 } 00578 00579 using std::ldexp; 00580 00581 inline float 00582 lgamma(float __x) 00583 { return __builtin_lgammaf(__x); } 00584 00585 inline long double 00586 lgamma(long double __x) 00587 { return __builtin_lgammal(__x); } 00588 00589 template<typename _Tp> 00590 inline typename __gnu_cxx::__promote<_Tp>::__type 00591 lgamma(_Tp __x) 00592 { 00593 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00594 return lgamma(__type(__x)); 00595 } 00596 00597 inline long long 00598 llrint(float __x) 00599 { return __builtin_llrintf(__x); } 00600 00601 inline long long 00602 llrint(long double __x) 00603 { return __builtin_llrintl(__x); } 00604 00605 template<typename _Tp> 00606 inline long long 00607 llrint(_Tp __x) 00608 { 00609 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00610 return llrint(__type(__x)); 00611 } 00612 00613 inline long long 00614 llround(float __x) 00615 { return __builtin_llroundf(__x); } 00616 00617 inline long long 00618 llround(long double __x) 00619 { return __builtin_llroundl(__x); } 00620 00621 template<typename _Tp> 00622 inline long long 00623 llround(_Tp __x) 00624 { 00625 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00626 return llround(__type(__x)); 00627 } 00628 00629 using std::log; 00630 using std::log10; 00631 00632 inline float 00633 log1p(float __x) 00634 { return __builtin_log1pf(__x); } 00635 00636 inline long double 00637 log1p(long double __x) 00638 { return __builtin_log1pl(__x); } 00639 00640 template<typename _Tp> 00641 inline typename __gnu_cxx::__promote<_Tp>::__type 00642 log1p(_Tp __x) 00643 { 00644 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00645 return log1p(__type(__x)); 00646 } 00647 00648 // DR 568. 00649 inline float 00650 log2(float __x) 00651 { return __builtin_log2f(__x); } 00652 00653 inline long double 00654 log2(long double __x) 00655 { return __builtin_log2l(__x); } 00656 00657 template<typename _Tp> 00658 inline typename __gnu_cxx::__promote<_Tp>::__type 00659 log2(_Tp __x) 00660 { 00661 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00662 return log2(__type(__x)); 00663 } 00664 00665 inline float 00666 logb(float __x) 00667 { return __builtin_logbf(__x); } 00668 00669 inline long double 00670 logb(long double __x) 00671 { return __builtin_logbl(__x); } 00672 00673 template<typename _Tp> 00674 inline typename __gnu_cxx::__promote<_Tp>::__type 00675 logb(_Tp __x) 00676 { 00677 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00678 return logb(__type(__x)); 00679 } 00680 00681 inline long 00682 lrint(float __x) 00683 { return __builtin_lrintf(__x); } 00684 00685 inline long 00686 lrint(long double __x) 00687 { return __builtin_lrintl(__x); } 00688 00689 template<typename _Tp> 00690 inline long 00691 lrint(_Tp __x) 00692 { 00693 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00694 return lrint(__type(__x)); 00695 } 00696 00697 inline long 00698 lround(float __x) 00699 { return __builtin_lroundf(__x); } 00700 00701 inline long 00702 lround(long double __x) 00703 { return __builtin_lroundl(__x); } 00704 00705 template<typename _Tp> 00706 inline long 00707 lround(_Tp __x) 00708 { 00709 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00710 return lround(__type(__x)); 00711 } 00712 00713 inline float 00714 nearbyint(float __x) 00715 { return __builtin_nearbyintf(__x); } 00716 00717 inline long double 00718 nearbyint(long double __x) 00719 { return __builtin_nearbyintl(__x); } 00720 00721 template<typename _Tp> 00722 inline typename __gnu_cxx::__promote<_Tp>::__type 00723 nearbyint(_Tp __x) 00724 { 00725 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00726 return nearbyint(__type(__x)); 00727 } 00728 00729 inline float 00730 nextafter(float __x, float __y) 00731 { return __builtin_nextafterf(__x, __y); } 00732 00733 inline long double 00734 nextafter(long double __x, long double __y) 00735 { return __builtin_nextafterl(__x, __y); } 00736 00737 template<typename _Tp, typename _Up> 00738 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00739 nextafter(_Tp __x, _Up __y) 00740 { 00741 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00742 return nextafter(__type(__x), __type(__y)); 00743 } 00744 00745 inline float 00746 nexttoward(float __x, long double __y) 00747 { return __builtin_nexttowardf(__x, __y); } 00748 00749 inline long double 00750 nexttoward(long double __x, long double __y) 00751 { return __builtin_nexttowardl(__x, __y); } 00752 00753 template<typename _Tp> 00754 inline typename __gnu_cxx::__promote<_Tp>::__type 00755 nexttoward(_Tp __x, long double __y) 00756 { 00757 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00758 return nexttoward(__type(__x), __y); 00759 } 00760 00761 // DR 550. What should the return type of pow(float,int) be? 00762 // NB: C++0x and TR1 != C++03. 00763 // using std::pow; 00764 00765 inline float 00766 remainder(float __x, float __y) 00767 { return __builtin_remainderf(__x, __y); } 00768 00769 inline long double 00770 remainder(long double __x, long double __y) 00771 { return __builtin_remainderl(__x, __y); } 00772 00773 template<typename _Tp, typename _Up> 00774 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00775 remainder(_Tp __x, _Up __y) 00776 { 00777 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00778 return remainder(__type(__x), __type(__y)); 00779 } 00780 00781 inline float 00782 remquo(float __x, float __y, int* __pquo) 00783 { return __builtin_remquof(__x, __y, __pquo); } 00784 00785 inline long double 00786 remquo(long double __x, long double __y, int* __pquo) 00787 { return __builtin_remquol(__x, __y, __pquo); } 00788 00789 template<typename _Tp, typename _Up> 00790 inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type 00791 remquo(_Tp __x, _Up __y, int* __pquo) 00792 { 00793 typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; 00794 return remquo(__type(__x), __type(__y), __pquo); 00795 } 00796 00797 inline float 00798 rint(float __x) 00799 { return __builtin_rintf(__x); } 00800 00801 inline long double 00802 rint(long double __x) 00803 { return __builtin_rintl(__x); } 00804 00805 template<typename _Tp> 00806 inline typename __gnu_cxx::__promote<_Tp>::__type 00807 rint(_Tp __x) 00808 { 00809 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00810 return rint(__type(__x)); 00811 } 00812 00813 inline float 00814 round(float __x) 00815 { return __builtin_roundf(__x); } 00816 00817 inline long double 00818 round(long double __x) 00819 { return __builtin_roundl(__x); } 00820 00821 template<typename _Tp> 00822 inline typename __gnu_cxx::__promote<_Tp>::__type 00823 round(_Tp __x) 00824 { 00825 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00826 return round(__type(__x)); 00827 } 00828 00829 inline float 00830 scalbln(float __x, long __ex) 00831 { return __builtin_scalblnf(__x, __ex); } 00832 00833 inline long double 00834 scalbln(long double __x, long __ex) 00835 { return __builtin_scalblnl(__x, __ex); } 00836 00837 template<typename _Tp> 00838 inline typename __gnu_cxx::__promote<_Tp>::__type 00839 scalbln(_Tp __x, long __ex) 00840 { 00841 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00842 return scalbln(__type(__x), __ex); 00843 } 00844 00845 inline float 00846 scalbn(float __x, int __ex) 00847 { return __builtin_scalbnf(__x, __ex); } 00848 00849 inline long double 00850 scalbn(long double __x, int __ex) 00851 { return __builtin_scalbnl(__x, __ex); } 00852 00853 template<typename _Tp> 00854 inline typename __gnu_cxx::__promote<_Tp>::__type 00855 scalbn(_Tp __x, int __ex) 00856 { 00857 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00858 return scalbn(__type(__x), __ex); 00859 } 00860 00861 using std::sin; 00862 using std::sinh; 00863 using std::sqrt; 00864 using std::tan; 00865 using std::tanh; 00866 00867 inline float 00868 tgamma(float __x) 00869 { return __builtin_tgammaf(__x); } 00870 00871 inline long double 00872 tgamma(long double __x) 00873 { return __builtin_tgammal(__x); } 00874 00875 template<typename _Tp> 00876 inline typename __gnu_cxx::__promote<_Tp>::__type 00877 tgamma(_Tp __x) 00878 { 00879 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00880 return tgamma(__type(__x)); 00881 } 00882 00883 inline float 00884 trunc(float __x) 00885 { return __builtin_truncf(__x); } 00886 00887 inline long double 00888 trunc(long double __x) 00889 { return __builtin_truncl(__x); } 00890 00891 template<typename _Tp> 00892 inline typename __gnu_cxx::__promote<_Tp>::__type 00893 trunc(_Tp __x) 00894 { 00895 typedef typename __gnu_cxx::__promote<_Tp>::__type __type; 00896 return trunc(__type(__x)); 00897 } 00898 00899 #endif 00900 00901 _GLIBCXX_END_NAMESPACE_TR1 00902 }