From 8ca399b47021d9b48cf5f37a4a716d1f276e964b Mon Sep 17 00:00:00 2001 From: zovjsra <58198508+Zovjsra@users.noreply.github.com> Date: Mon, 12 Dec 2022 19:49:54 +0800 Subject: [PATCH] change readme --- Readme.md | 2 +- cmath.gcov | 1944 ++++++++++++++++++++++++++++++++++++++++++++++++ sphere.cc.gcov | 103 +++ 3 files changed, 2048 insertions(+), 1 deletion(-) create mode 100644 cmath.gcov create mode 100644 sphere.cc.gcov diff --git a/Readme.md b/Readme.md index 9a8ebde..8dcf712 100644 --- a/Readme.md +++ b/Readme.md @@ -25,7 +25,7 @@ cd unittest ## 練習內容 在 `src` 目錄中含有 `sphere` 物件的宣告及實作,但是這個程式碼中有一些邏輯錯誤,同學需完成以下步驟: -1. 編寫 unittest 使 sphere 程式碼覆蓋率達到 70% 以上 +1. 編寫 unittest 使 sphere 程式碼覆蓋率達到 80% 以上 2. 修改 `sphere.cc` 程式碼,使程式的邏輯完全正確 ## 覆蓋率計算 diff --git a/cmath.gcov b/cmath.gcov new file mode 100644 index 0000000..63be454 --- /dev/null +++ b/cmath.gcov @@ -0,0 +1,1944 @@ + -: 0:Source:/opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/cmath + -: 0:Graph:/Users/chenyuehon/gitRepos/gtest_exercise/build/src/CMakeFiles/sphere.dir/sphere.cc.gcno + -: 0:Data:/Users/chenyuehon/gitRepos/gtest_exercise/build/src/CMakeFiles/sphere.dir/sphere.cc.gcda + -: 0:Runs:1 + -: 1:// -*- C++ -*- C forwarding header. + -: 2: + -: 3:// Copyright (C) 1997-2022 Free Software Foundation, Inc. + -: 4:// + -: 5:// This file is part of the GNU ISO C++ Library. This library is free + -: 6:// software; you can redistribute it and/or modify it under the + -: 7:// terms of the GNU General Public License as published by the + -: 8:// Free Software Foundation; either version 3, or (at your option) + -: 9:// any later version. + -: 10: + -: 11:// This library is distributed in the hope that it will be useful, + -: 12:// but WITHOUT ANY WARRANTY; without even the implied warranty of + -: 13:// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + -: 14:// GNU General Public License for more details. + -: 15: + -: 16:// Under Section 7 of GPL version 3, you are granted additional + -: 17:// permissions described in the GCC Runtime Library Exception, version + -: 18:// 3.1, as published by the Free Software Foundation. + -: 19: + -: 20:// You should have received a copy of the GNU General Public License and + -: 21:// a copy of the GCC Runtime Library Exception along with this program; + -: 22:// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + -: 23:// . + -: 24: + -: 25:/** @file include/cmath + -: 26: * This is a Standard C++ Library file. You should @c \#include this file + -: 27: * in your programs, rather than any of the @a *.h implementation files. + -: 28: * + -: 29: * This is the C++ version of the Standard C Library header @c math.h, + -: 30: * and its contents are (mostly) the same as that header, but are all + -: 31: * contained in the namespace @c std (except for names which are defined + -: 32: * as macros in C). + -: 33: */ + -: 34: + -: 35:// + -: 36:// ISO C++ 14882: 26.5 C library + -: 37:// + -: 38: + -: 39:#pragma GCC system_header + -: 40: + -: 41:#include + -: 42:#include + -: 43:#include + -: 44:#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS + -: 45:#include_next + -: 46:#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS + -: 47:#include + -: 48: + -: 49:#ifndef _GLIBCXX_CMATH + -: 50:#define _GLIBCXX_CMATH 1 + -: 51: + -: 52:// Get rid of those macros defined in in lieu of real functions. + -: 53:#undef div + -: 54:#undef acos + -: 55:#undef asin + -: 56:#undef atan + -: 57:#undef atan2 + -: 58:#undef ceil + -: 59:#undef cos + -: 60:#undef cosh + -: 61:#undef exp + -: 62:#undef fabs + -: 63:#undef floor + -: 64:#undef fmod + -: 65:#undef frexp + -: 66:#undef ldexp + -: 67:#undef log + -: 68:#undef log10 + -: 69:#undef modf + -: 70:#undef pow + -: 71:#undef sin + -: 72:#undef sinh + -: 73:#undef sqrt + -: 74:#undef tan + -: 75:#undef tanh + -: 76: + -: 77:extern "C++" + -: 78:{ + -: 79:namespace std _GLIBCXX_VISIBILITY(default) + -: 80:{ + -: 81:_GLIBCXX_BEGIN_NAMESPACE_VERSION + -: 82: + -: 83: using ::acos; + -: 84: + -: 85:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 86: inline _GLIBCXX_CONSTEXPR float + -: 87: acos(float __x) + -: 88: { return __builtin_acosf(__x); } + -: 89: + -: 90: inline _GLIBCXX_CONSTEXPR long double + -: 91: acos(long double __x) + -: 92: { return __builtin_acosl(__x); } + -: 93:#endif + -: 94: + -: 95: template + -: 96: inline _GLIBCXX_CONSTEXPR + -: 97: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 98: double>::__type + -: 99: acos(_Tp __x) + -: 100: { return __builtin_acos(__x); } + -: 101: + -: 102: using ::asin; + -: 103: + -: 104:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 105: inline _GLIBCXX_CONSTEXPR float + -: 106: asin(float __x) + -: 107: { return __builtin_asinf(__x); } + -: 108: + -: 109: inline _GLIBCXX_CONSTEXPR long double + -: 110: asin(long double __x) + -: 111: { return __builtin_asinl(__x); } + -: 112:#endif + -: 113: + -: 114: template + -: 115: inline _GLIBCXX_CONSTEXPR + -: 116: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 117: double>::__type + -: 118: asin(_Tp __x) + -: 119: { return __builtin_asin(__x); } + -: 120: + -: 121: using ::atan; + -: 122: + -: 123:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 124: inline _GLIBCXX_CONSTEXPR float + -: 125: atan(float __x) + -: 126: { return __builtin_atanf(__x); } + -: 127: + -: 128: inline _GLIBCXX_CONSTEXPR long double + -: 129: atan(long double __x) + -: 130: { return __builtin_atanl(__x); } + -: 131:#endif + -: 132: + -: 133: template + -: 134: inline _GLIBCXX_CONSTEXPR + -: 135: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 136: double>::__type + -: 137: atan(_Tp __x) + -: 138: { return __builtin_atan(__x); } + -: 139: + -: 140: using ::atan2; + -: 141: + -: 142:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 143: inline _GLIBCXX_CONSTEXPR float + -: 144: atan2(float __y, float __x) + -: 145: { return __builtin_atan2f(__y, __x); } + -: 146: + -: 147: inline _GLIBCXX_CONSTEXPR long double + -: 148: atan2(long double __y, long double __x) + -: 149: { return __builtin_atan2l(__y, __x); } + -: 150:#endif + -: 151: + -: 152: template + -: 153: inline _GLIBCXX_CONSTEXPR + -: 154: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 155: atan2(_Tp __y, _Up __x) + -: 156: { + -: 157: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 158: return atan2(__type(__y), __type(__x)); + -: 159: } + -: 160: + -: 161: using ::ceil; + -: 162: + -: 163:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 164: inline _GLIBCXX_CONSTEXPR float + -: 165: ceil(float __x) + -: 166: { return __builtin_ceilf(__x); } + -: 167: + -: 168: inline _GLIBCXX_CONSTEXPR long double + -: 169: ceil(long double __x) + -: 170: { return __builtin_ceill(__x); } + -: 171:#endif + -: 172: + -: 173: template + -: 174: inline _GLIBCXX_CONSTEXPR + -: 175: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 176: double>::__type + -: 177: ceil(_Tp __x) + -: 178: { return __builtin_ceil(__x); } + -: 179: + -: 180: using ::cos; + -: 181: + -: 182:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 183: inline _GLIBCXX_CONSTEXPR float + -: 184: cos(float __x) + -: 185: { return __builtin_cosf(__x); } + -: 186: + -: 187: inline _GLIBCXX_CONSTEXPR long double + -: 188: cos(long double __x) + -: 189: { return __builtin_cosl(__x); } + -: 190:#endif + -: 191: + -: 192: template + -: 193: inline _GLIBCXX_CONSTEXPR + -: 194: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 195: double>::__type + -: 196: cos(_Tp __x) + -: 197: { return __builtin_cos(__x); } + -: 198: + -: 199: using ::cosh; + -: 200: + -: 201:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 202: inline _GLIBCXX_CONSTEXPR float + -: 203: cosh(float __x) + -: 204: { return __builtin_coshf(__x); } + -: 205: + -: 206: inline _GLIBCXX_CONSTEXPR long double + -: 207: cosh(long double __x) + -: 208: { return __builtin_coshl(__x); } + -: 209:#endif + -: 210: + -: 211: template + -: 212: inline _GLIBCXX_CONSTEXPR + -: 213: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 214: double>::__type + -: 215: cosh(_Tp __x) + -: 216: { return __builtin_cosh(__x); } + -: 217: + -: 218: using ::exp; + -: 219: + -: 220:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 221: inline _GLIBCXX_CONSTEXPR float + -: 222: exp(float __x) + -: 223: { return __builtin_expf(__x); } + -: 224: + -: 225: inline _GLIBCXX_CONSTEXPR long double + -: 226: exp(long double __x) + -: 227: { return __builtin_expl(__x); } + -: 228:#endif + -: 229: + -: 230: template + -: 231: inline _GLIBCXX_CONSTEXPR + -: 232: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 233: double>::__type + -: 234: exp(_Tp __x) + -: 235: { return __builtin_exp(__x); } + -: 236: + -: 237: using ::fabs; + -: 238: + -: 239:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 240: inline _GLIBCXX_CONSTEXPR float + -: 241: fabs(float __x) + -: 242: { return __builtin_fabsf(__x); } + -: 243: + -: 244: inline _GLIBCXX_CONSTEXPR long double + -: 245: fabs(long double __x) + -: 246: { return __builtin_fabsl(__x); } + -: 247:#endif + -: 248: + -: 249: template + -: 250: inline _GLIBCXX_CONSTEXPR + -: 251: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 252: double>::__type + -: 253: fabs(_Tp __x) + -: 254: { return __builtin_fabs(__x); } + -: 255: + -: 256: using ::floor; + -: 257: + -: 258:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 259: inline _GLIBCXX_CONSTEXPR float + -: 260: floor(float __x) + -: 261: { return __builtin_floorf(__x); } + -: 262: + -: 263: inline _GLIBCXX_CONSTEXPR long double + -: 264: floor(long double __x) + -: 265: { return __builtin_floorl(__x); } + -: 266:#endif + -: 267: + -: 268: template + -: 269: inline _GLIBCXX_CONSTEXPR + -: 270: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 271: double>::__type + -: 272: floor(_Tp __x) + -: 273: { return __builtin_floor(__x); } + -: 274: + -: 275: using ::fmod; + -: 276: + -: 277:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 278: inline _GLIBCXX_CONSTEXPR float + -: 279: fmod(float __x, float __y) + -: 280: { return __builtin_fmodf(__x, __y); } + -: 281: + -: 282: inline _GLIBCXX_CONSTEXPR long double + -: 283: fmod(long double __x, long double __y) + -: 284: { return __builtin_fmodl(__x, __y); } + -: 285:#endif + -: 286: + -: 287: template + -: 288: inline _GLIBCXX_CONSTEXPR + -: 289: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 290: fmod(_Tp __x, _Up __y) + -: 291: { + -: 292: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 293: return fmod(__type(__x), __type(__y)); + -: 294: } + -: 295: + -: 296: using ::frexp; + -: 297: + -: 298:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 299: inline float + -: 300: frexp(float __x, int* __exp) + -: 301: { return __builtin_frexpf(__x, __exp); } + -: 302: + -: 303: inline long double + -: 304: frexp(long double __x, int* __exp) + -: 305: { return __builtin_frexpl(__x, __exp); } + -: 306:#endif + -: 307: + -: 308: template + -: 309: inline _GLIBCXX_CONSTEXPR + -: 310: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 311: double>::__type + -: 312: frexp(_Tp __x, int* __exp) + -: 313: { return __builtin_frexp(__x, __exp); } + -: 314: + -: 315: using ::ldexp; + -: 316: + -: 317:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 318: inline _GLIBCXX_CONSTEXPR float + -: 319: ldexp(float __x, int __exp) + -: 320: { return __builtin_ldexpf(__x, __exp); } + -: 321: + -: 322: inline _GLIBCXX_CONSTEXPR long double + -: 323: ldexp(long double __x, int __exp) + -: 324: { return __builtin_ldexpl(__x, __exp); } + -: 325:#endif + -: 326: + -: 327: template + -: 328: inline _GLIBCXX_CONSTEXPR + -: 329: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 330: double>::__type + -: 331: ldexp(_Tp __x, int __exp) + -: 332: { return __builtin_ldexp(__x, __exp); } + -: 333: + -: 334: using ::log; + -: 335: + -: 336:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 337: inline _GLIBCXX_CONSTEXPR float + -: 338: log(float __x) + -: 339: { return __builtin_logf(__x); } + -: 340: + -: 341: inline _GLIBCXX_CONSTEXPR long double + -: 342: log(long double __x) + -: 343: { return __builtin_logl(__x); } + -: 344:#endif + -: 345: + -: 346: template + -: 347: inline _GLIBCXX_CONSTEXPR + -: 348: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 349: double>::__type + -: 350: log(_Tp __x) + -: 351: { return __builtin_log(__x); } + -: 352: + -: 353: using ::log10; + -: 354: + -: 355:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 356: inline _GLIBCXX_CONSTEXPR float + -: 357: log10(float __x) + -: 358: { return __builtin_log10f(__x); } + -: 359: + -: 360: inline _GLIBCXX_CONSTEXPR long double + -: 361: log10(long double __x) + -: 362: { return __builtin_log10l(__x); } + -: 363:#endif + -: 364: + -: 365: template + -: 366: inline _GLIBCXX_CONSTEXPR + -: 367: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 368: double>::__type + -: 369: log10(_Tp __x) + -: 370: { return __builtin_log10(__x); } + -: 371: + -: 372: using ::modf; + -: 373: + -: 374:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 375: inline float + -: 376: modf(float __x, float* __iptr) + -: 377: { return __builtin_modff(__x, __iptr); } + -: 378: + -: 379: inline long double + -: 380: modf(long double __x, long double* __iptr) + -: 381: { return __builtin_modfl(__x, __iptr); } + -: 382:#endif + -: 383: + -: 384: using ::pow; + -: 385: + -: 386:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 387: inline _GLIBCXX_CONSTEXPR float + -: 388: pow(float __x, float __y) + -: 389: { return __builtin_powf(__x, __y); } + -: 390: + -: 391: inline _GLIBCXX_CONSTEXPR long double + -: 392: pow(long double __x, long double __y) + -: 393: { return __builtin_powl(__x, __y); } + -: 394: + -: 395:#if __cplusplus < 201103L + -: 396: // _GLIBCXX_RESOLVE_LIB_DEFECTS + -: 397: // DR 550. What should the return type of pow(float,int) be? + -: 398: inline double + -: 399: pow(double __x, int __i) + -: 400: { return __builtin_powi(__x, __i); } + -: 401: + -: 402: inline float + -: 403: pow(float __x, int __n) + -: 404: { return __builtin_powif(__x, __n); } + -: 405: + -: 406: inline long double + -: 407: pow(long double __x, int __n) + -: 408: { return __builtin_powil(__x, __n); } + -: 409:#endif + -: 410:#endif + -: 411: + -: 412: template + -: 413: inline _GLIBCXX_CONSTEXPR + -: 414: typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + #####: 415: pow(_Tp __x, _Up __y) + -: 416: { + -: 417: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + #####: 418: return pow(__type(__x), __type(__y)); + -: 419: } + -: 420: + -: 421: using ::sin; + -: 422: + -: 423:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 424: inline _GLIBCXX_CONSTEXPR float + -: 425: sin(float __x) + -: 426: { return __builtin_sinf(__x); } + -: 427: + -: 428: inline _GLIBCXX_CONSTEXPR long double + -: 429: sin(long double __x) + -: 430: { return __builtin_sinl(__x); } + -: 431:#endif + -: 432: + -: 433: template + -: 434: inline _GLIBCXX_CONSTEXPR + -: 435: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 436: double>::__type + -: 437: sin(_Tp __x) + -: 438: { return __builtin_sin(__x); } + -: 439: + -: 440: using ::sinh; + -: 441: + -: 442:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 443: inline _GLIBCXX_CONSTEXPR float + -: 444: sinh(float __x) + -: 445: { return __builtin_sinhf(__x); } + -: 446: + -: 447: inline _GLIBCXX_CONSTEXPR long double + -: 448: sinh(long double __x) + -: 449: { return __builtin_sinhl(__x); } + -: 450:#endif + -: 451: + -: 452: template + -: 453: inline _GLIBCXX_CONSTEXPR + -: 454: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 455: double>::__type + -: 456: sinh(_Tp __x) + -: 457: { return __builtin_sinh(__x); } + -: 458: + -: 459: using ::sqrt; + -: 460: + -: 461:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 462: inline _GLIBCXX_CONSTEXPR float + -: 463: sqrt(float __x) + -: 464: { return __builtin_sqrtf(__x); } + -: 465: + -: 466: inline _GLIBCXX_CONSTEXPR long double + -: 467: sqrt(long double __x) + -: 468: { return __builtin_sqrtl(__x); } + -: 469:#endif + -: 470: + -: 471: template + -: 472: inline _GLIBCXX_CONSTEXPR + -: 473: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 474: double>::__type + -: 475: sqrt(_Tp __x) + -: 476: { return __builtin_sqrt(__x); } + -: 477: + -: 478: using ::tan; + -: 479: + -: 480:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 481: inline _GLIBCXX_CONSTEXPR float + -: 482: tan(float __x) + -: 483: { return __builtin_tanf(__x); } + -: 484: + -: 485: inline _GLIBCXX_CONSTEXPR long double + -: 486: tan(long double __x) + -: 487: { return __builtin_tanl(__x); } + -: 488:#endif + -: 489: + -: 490: template + -: 491: inline _GLIBCXX_CONSTEXPR + -: 492: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 493: double>::__type + -: 494: tan(_Tp __x) + -: 495: { return __builtin_tan(__x); } + -: 496: + -: 497: using ::tanh; + -: 498: + -: 499:#ifndef __CORRECT_ISO_CPP_MATH_H_PROTO + -: 500: inline _GLIBCXX_CONSTEXPR float + -: 501: tanh(float __x) + -: 502: { return __builtin_tanhf(__x); } + -: 503: + -: 504: inline _GLIBCXX_CONSTEXPR long double + -: 505: tanh(long double __x) + -: 506: { return __builtin_tanhl(__x); } + -: 507:#endif + -: 508: + -: 509: template + -: 510: inline _GLIBCXX_CONSTEXPR + -: 511: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 512: double>::__type + -: 513: tanh(_Tp __x) + -: 514: { return __builtin_tanh(__x); } + -: 515: + -: 516:#if _GLIBCXX_USE_C99_MATH + -: 517:#if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC + -: 518: + -: 519:// These are possible macros imported from C99-land. + -: 520:#undef fpclassify + -: 521:#undef isfinite + -: 522:#undef isinf + -: 523:#undef isnan + -: 524:#undef isnormal + -: 525:#undef signbit + -: 526:#undef isgreater + -: 527:#undef isgreaterequal + -: 528:#undef isless + -: 529:#undef islessequal + -: 530:#undef islessgreater + -: 531:#undef isunordered + -: 532: + -: 533:#if __cplusplus >= 201103L + -: 534: + -: 535:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 536: constexpr int + -: 537: fpclassify(float __x) + -: 538: { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + -: 539: FP_SUBNORMAL, FP_ZERO, __x); } + -: 540: + -: 541: constexpr int + -: 542: fpclassify(double __x) + -: 543: { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + -: 544: FP_SUBNORMAL, FP_ZERO, __x); } + -: 545: + -: 546: constexpr int + -: 547: fpclassify(long double __x) + -: 548: { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + -: 549: FP_SUBNORMAL, FP_ZERO, __x); } + -: 550:#endif + -: 551: + -: 552:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 553: template + -: 554: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 555: int>::__type + -: 556: fpclassify(_Tp __x) + -: 557: { return __x != 0 ? FP_NORMAL : FP_ZERO; } + -: 558:#endif + -: 559: + -: 560:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 561: constexpr bool + -: 562: isfinite(float __x) + -: 563: { return __builtin_isfinite(__x); } + -: 564: + -: 565: constexpr bool + -: 566: isfinite(double __x) + -: 567: { return __builtin_isfinite(__x); } + -: 568: + -: 569: constexpr bool + -: 570: isfinite(long double __x) + -: 571: { return __builtin_isfinite(__x); } + -: 572:#endif + -: 573: + -: 574:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 575: template + -: 576: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 577: bool>::__type + -: 578: isfinite(_Tp __x) + -: 579: { return true; } + -: 580:#endif + -: 581: + -: 582:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 583: constexpr bool + -: 584: isinf(float __x) + -: 585: { return __builtin_isinf(__x); } + -: 586: + -: 587:#if _GLIBCXX_HAVE_OBSOLETE_ISINF \ + -: 588: && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC + -: 589: using ::isinf; + -: 590:#else + -: 591: constexpr bool + -: 592: isinf(double __x) + -: 593: { return __builtin_isinf(__x); } + -: 594:#endif + -: 595: + -: 596: constexpr bool + -: 597: isinf(long double __x) + -: 598: { return __builtin_isinf(__x); } + -: 599:#endif + -: 600: + -: 601:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 602: template + -: 603: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 604: bool>::__type + -: 605: isinf(_Tp __x) + -: 606: { return false; } + -: 607:#endif + -: 608: + -: 609:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 610: constexpr bool + -: 611: isnan(float __x) + -: 612: { return __builtin_isnan(__x); } + -: 613: + -: 614:#if _GLIBCXX_HAVE_OBSOLETE_ISNAN \ + -: 615: && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC + -: 616: using ::isnan; + -: 617:#else + -: 618: constexpr bool + -: 619: isnan(double __x) + -: 620: { return __builtin_isnan(__x); } + -: 621:#endif + -: 622: + -: 623: constexpr bool + -: 624: isnan(long double __x) + -: 625: { return __builtin_isnan(__x); } + -: 626:#endif + -: 627: + -: 628:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 629: template + -: 630: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 631: bool>::__type + -: 632: isnan(_Tp __x) + -: 633: { return false; } + -: 634:#endif + -: 635: + -: 636:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 637: constexpr bool + -: 638: isnormal(float __x) + -: 639: { return __builtin_isnormal(__x); } + -: 640: + -: 641: constexpr bool + -: 642: isnormal(double __x) + -: 643: { return __builtin_isnormal(__x); } + -: 644: + -: 645: constexpr bool + -: 646: isnormal(long double __x) + -: 647: { return __builtin_isnormal(__x); } + -: 648:#endif + -: 649: + -: 650:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 651: template + -: 652: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 653: bool>::__type + -: 654: isnormal(_Tp __x) + -: 655: { return __x != 0 ? true : false; } + -: 656:#endif + -: 657: + -: 658:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 659: // Note: middle-end/36757 is fixed, __builtin_signbit is type-generic. + -: 660: constexpr bool + -: 661: signbit(float __x) + -: 662: { return __builtin_signbit(__x); } + -: 663: + -: 664: constexpr bool + -: 665: signbit(double __x) + -: 666: { return __builtin_signbit(__x); } + -: 667: + -: 668: constexpr bool + -: 669: signbit(long double __x) + -: 670: { return __builtin_signbit(__x); } + -: 671:#endif + -: 672: + -: 673:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 674: template + -: 675: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 676: bool>::__type + -: 677: signbit(_Tp __x) + -: 678: { return __x < 0 ? true : false; } + -: 679:#endif + -: 680: + -: 681:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 682: constexpr bool + -: 683: isgreater(float __x, float __y) + -: 684: { return __builtin_isgreater(__x, __y); } + -: 685: + -: 686: constexpr bool + -: 687: isgreater(double __x, double __y) + -: 688: { return __builtin_isgreater(__x, __y); } + -: 689: + -: 690: constexpr bool + -: 691: isgreater(long double __x, long double __y) + -: 692: { return __builtin_isgreater(__x, __y); } + -: 693:#endif + -: 694: + -: 695:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 696: template + -: 697: constexpr typename + -: 698: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + -: 699: && __is_arithmetic<_Up>::__value), bool>::__type + -: 700: isgreater(_Tp __x, _Up __y) + -: 701: { + -: 702: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 703: return __builtin_isgreater(__type(__x), __type(__y)); + -: 704: } + -: 705:#endif + -: 706: + -: 707:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 708: constexpr bool + -: 709: isgreaterequal(float __x, float __y) + -: 710: { return __builtin_isgreaterequal(__x, __y); } + -: 711: + -: 712: constexpr bool + -: 713: isgreaterequal(double __x, double __y) + -: 714: { return __builtin_isgreaterequal(__x, __y); } + -: 715: + -: 716: constexpr bool + -: 717: isgreaterequal(long double __x, long double __y) + -: 718: { return __builtin_isgreaterequal(__x, __y); } + -: 719:#endif + -: 720: + -: 721:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 722: template + -: 723: constexpr typename + -: 724: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + -: 725: && __is_arithmetic<_Up>::__value), bool>::__type + -: 726: isgreaterequal(_Tp __x, _Up __y) + -: 727: { + -: 728: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 729: return __builtin_isgreaterequal(__type(__x), __type(__y)); + -: 730: } + -: 731:#endif + -: 732: + -: 733:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 734: constexpr bool + -: 735: isless(float __x, float __y) + -: 736: { return __builtin_isless(__x, __y); } + -: 737: + -: 738: constexpr bool + -: 739: isless(double __x, double __y) + -: 740: { return __builtin_isless(__x, __y); } + -: 741: + -: 742: constexpr bool + -: 743: isless(long double __x, long double __y) + -: 744: { return __builtin_isless(__x, __y); } + -: 745:#endif + -: 746: + -: 747:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 748: template + -: 749: constexpr typename + -: 750: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + -: 751: && __is_arithmetic<_Up>::__value), bool>::__type + -: 752: isless(_Tp __x, _Up __y) + -: 753: { + -: 754: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 755: return __builtin_isless(__type(__x), __type(__y)); + -: 756: } + -: 757:#endif + -: 758: + -: 759:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 760: constexpr bool + -: 761: islessequal(float __x, float __y) + -: 762: { return __builtin_islessequal(__x, __y); } + -: 763: + -: 764: constexpr bool + -: 765: islessequal(double __x, double __y) + -: 766: { return __builtin_islessequal(__x, __y); } + -: 767: + -: 768: constexpr bool + -: 769: islessequal(long double __x, long double __y) + -: 770: { return __builtin_islessequal(__x, __y); } + -: 771:#endif + -: 772: + -: 773:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 774: template + -: 775: constexpr typename + -: 776: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + -: 777: && __is_arithmetic<_Up>::__value), bool>::__type + -: 778: islessequal(_Tp __x, _Up __y) + -: 779: { + -: 780: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 781: return __builtin_islessequal(__type(__x), __type(__y)); + -: 782: } + -: 783:#endif + -: 784: + -: 785:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 786: constexpr bool + -: 787: islessgreater(float __x, float __y) + -: 788: { return __builtin_islessgreater(__x, __y); } + -: 789: + -: 790: constexpr bool + -: 791: islessgreater(double __x, double __y) + -: 792: { return __builtin_islessgreater(__x, __y); } + -: 793: + -: 794: constexpr bool + -: 795: islessgreater(long double __x, long double __y) + -: 796: { return __builtin_islessgreater(__x, __y); } + -: 797:#endif + -: 798: + -: 799:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 800: template + -: 801: constexpr typename + -: 802: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + -: 803: && __is_arithmetic<_Up>::__value), bool>::__type + -: 804: islessgreater(_Tp __x, _Up __y) + -: 805: { + -: 806: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 807: return __builtin_islessgreater(__type(__x), __type(__y)); + -: 808: } + -: 809:#endif + -: 810: + -: 811:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 812: constexpr bool + -: 813: isunordered(float __x, float __y) + -: 814: { return __builtin_isunordered(__x, __y); } + -: 815: + -: 816: constexpr bool + -: 817: isunordered(double __x, double __y) + -: 818: { return __builtin_isunordered(__x, __y); } + -: 819: + -: 820: constexpr bool + -: 821: isunordered(long double __x, long double __y) + -: 822: { return __builtin_isunordered(__x, __y); } + -: 823:#endif + -: 824: + -: 825:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 826: template + -: 827: constexpr typename + -: 828: __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value + -: 829: && __is_arithmetic<_Up>::__value), bool>::__type + -: 830: isunordered(_Tp __x, _Up __y) + -: 831: { + -: 832: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 833: return __builtin_isunordered(__type(__x), __type(__y)); + -: 834: } + -: 835:#endif + -: 836: + -: 837:#else + -: 838: + -: 839: template + -: 840: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 841: int>::__type + -: 842: fpclassify(_Tp __f) + -: 843: { + -: 844: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 845: return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, + -: 846: FP_SUBNORMAL, FP_ZERO, __type(__f)); + -: 847: } + -: 848: + -: 849: template + -: 850: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 851: int>::__type + -: 852: isfinite(_Tp __f) + -: 853: { + -: 854: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 855: return __builtin_isfinite(__type(__f)); + -: 856: } + -: 857: + -: 858: template + -: 859: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 860: int>::__type + -: 861: isinf(_Tp __f) + -: 862: { + -: 863: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 864: return __builtin_isinf(__type(__f)); + -: 865: } + -: 866: + -: 867: template + -: 868: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 869: int>::__type + -: 870: isnan(_Tp __f) + -: 871: { + -: 872: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 873: return __builtin_isnan(__type(__f)); + -: 874: } + -: 875: + -: 876: template + -: 877: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 878: int>::__type + -: 879: isnormal(_Tp __f) + -: 880: { + -: 881: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 882: return __builtin_isnormal(__type(__f)); + -: 883: } + -: 884: + -: 885: template + -: 886: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 887: int>::__type + -: 888: signbit(_Tp __f) + -: 889: { + -: 890: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 891: return __builtin_signbit(__type(__f)); + -: 892: } + -: 893: + -: 894: template + -: 895: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 896: int>::__type + -: 897: isgreater(_Tp __f1, _Tp __f2) + -: 898: { + -: 899: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 900: return __builtin_isgreater(__type(__f1), __type(__f2)); + -: 901: } + -: 902: + -: 903: template + -: 904: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 905: int>::__type + -: 906: isgreaterequal(_Tp __f1, _Tp __f2) + -: 907: { + -: 908: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 909: return __builtin_isgreaterequal(__type(__f1), __type(__f2)); + -: 910: } + -: 911: + -: 912: template + -: 913: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 914: int>::__type + -: 915: isless(_Tp __f1, _Tp __f2) + -: 916: { + -: 917: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 918: return __builtin_isless(__type(__f1), __type(__f2)); + -: 919: } + -: 920: + -: 921: template + -: 922: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 923: int>::__type + -: 924: islessequal(_Tp __f1, _Tp __f2) + -: 925: { + -: 926: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 927: return __builtin_islessequal(__type(__f1), __type(__f2)); + -: 928: } + -: 929: + -: 930: template + -: 931: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 932: int>::__type + -: 933: islessgreater(_Tp __f1, _Tp __f2) + -: 934: { + -: 935: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 936: return __builtin_islessgreater(__type(__f1), __type(__f2)); + -: 937: } + -: 938: + -: 939: template + -: 940: inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value, + -: 941: int>::__type + -: 942: isunordered(_Tp __f1, _Tp __f2) + -: 943: { + -: 944: typedef typename __gnu_cxx::__promote<_Tp>::__type __type; + -: 945: return __builtin_isunordered(__type(__f1), __type(__f2)); + -: 946: } + -: 947: + -: 948:#endif // C++11 + -: 949:#endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */ + -: 950:#endif /* _GLIBCXX_USE_C99_MATH */ + -: 951: + -: 952:#if __cplusplus >= 201103L + -: 953: + -: 954:#ifdef _GLIBCXX_USE_C99_MATH_TR1 + -: 955: + -: 956:#undef acosh + -: 957:#undef acoshf + -: 958:#undef acoshl + -: 959:#undef asinh + -: 960:#undef asinhf + -: 961:#undef asinhl + -: 962:#undef atanh + -: 963:#undef atanhf + -: 964:#undef atanhl + -: 965:#undef cbrt + -: 966:#undef cbrtf + -: 967:#undef cbrtl + -: 968:#undef copysign + -: 969:#undef copysignf + -: 970:#undef copysignl + -: 971:#undef erf + -: 972:#undef erff + -: 973:#undef erfl + -: 974:#undef erfc + -: 975:#undef erfcf + -: 976:#undef erfcl + -: 977:#undef exp2 + -: 978:#undef exp2f + -: 979:#undef exp2l + -: 980:#undef expm1 + -: 981:#undef expm1f + -: 982:#undef expm1l + -: 983:#undef fdim + -: 984:#undef fdimf + -: 985:#undef fdiml + -: 986:#undef fma + -: 987:#undef fmaf + -: 988:#undef fmal + -: 989:#undef fmax + -: 990:#undef fmaxf + -: 991:#undef fmaxl + -: 992:#undef fmin + -: 993:#undef fminf + -: 994:#undef fminl + -: 995:#undef hypot + -: 996:#undef hypotf + -: 997:#undef hypotl + -: 998:#undef ilogb + -: 999:#undef ilogbf + -: 1000:#undef ilogbl + -: 1001:#undef lgamma + -: 1002:#undef lgammaf + -: 1003:#undef lgammal + -: 1004:#ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS + -: 1005:#undef llrint + -: 1006:#undef llrintf + -: 1007:#undef llrintl + -: 1008:#undef llround + -: 1009:#undef llroundf + -: 1010:#undef llroundl + -: 1011:#endif + -: 1012:#undef log1p + -: 1013:#undef log1pf + -: 1014:#undef log1pl + -: 1015:#undef log2 + -: 1016:#undef log2f + -: 1017:#undef log2l + -: 1018:#undef logb + -: 1019:#undef logbf + -: 1020:#undef logbl + -: 1021:#undef lrint + -: 1022:#undef lrintf + -: 1023:#undef lrintl + -: 1024:#undef lround + -: 1025:#undef lroundf + -: 1026:#undef lroundl + -: 1027:#undef nan + -: 1028:#undef nanf + -: 1029:#undef nanl + -: 1030:#undef nearbyint + -: 1031:#undef nearbyintf + -: 1032:#undef nearbyintl + -: 1033:#undef nextafter + -: 1034:#undef nextafterf + -: 1035:#undef nextafterl + -: 1036:#undef nexttoward + -: 1037:#undef nexttowardf + -: 1038:#undef nexttowardl + -: 1039:#undef remainder + -: 1040:#undef remainderf + -: 1041:#undef remainderl + -: 1042:#undef remquo + -: 1043:#undef remquof + -: 1044:#undef remquol + -: 1045:#undef rint + -: 1046:#undef rintf + -: 1047:#undef rintl + -: 1048:#undef round + -: 1049:#undef roundf + -: 1050:#undef roundl + -: 1051:#undef scalbln + -: 1052:#undef scalblnf + -: 1053:#undef scalblnl + -: 1054:#undef scalbn + -: 1055:#undef scalbnf + -: 1056:#undef scalbnl + -: 1057:#undef tgamma + -: 1058:#undef tgammaf + -: 1059:#undef tgammal + -: 1060:#undef trunc + -: 1061:#undef truncf + -: 1062:#undef truncl + -: 1063: + -: 1064: // types + -: 1065: using ::double_t; + -: 1066: using ::float_t; + -: 1067: + -: 1068: // functions + -: 1069: using ::acosh; + -: 1070: using ::acoshf; + -: 1071: using ::acoshl; + -: 1072: + -: 1073: using ::asinh; + -: 1074: using ::asinhf; + -: 1075: using ::asinhl; + -: 1076: + -: 1077: using ::atanh; + -: 1078: using ::atanhf; + -: 1079: using ::atanhl; + -: 1080: + -: 1081: using ::cbrt; + -: 1082: using ::cbrtf; + -: 1083: using ::cbrtl; + -: 1084: + -: 1085: using ::copysign; + -: 1086: using ::copysignf; + -: 1087: using ::copysignl; + -: 1088: + -: 1089: using ::erf; + -: 1090: using ::erff; + -: 1091: using ::erfl; + -: 1092: + -: 1093: using ::erfc; + -: 1094: using ::erfcf; + -: 1095: using ::erfcl; + -: 1096: + -: 1097: using ::exp2; + -: 1098: using ::exp2f; + -: 1099: using ::exp2l; + -: 1100: + -: 1101: using ::expm1; + -: 1102: using ::expm1f; + -: 1103: using ::expm1l; + -: 1104: + -: 1105: using ::fdim; + -: 1106: using ::fdimf; + -: 1107: using ::fdiml; + -: 1108: + -: 1109: using ::fma; + -: 1110: using ::fmaf; + -: 1111: using ::fmal; + -: 1112: + -: 1113: using ::fmax; + -: 1114: using ::fmaxf; + -: 1115: using ::fmaxl; + -: 1116: + -: 1117: using ::fmin; + -: 1118: using ::fminf; + -: 1119: using ::fminl; + -: 1120: + -: 1121: using ::hypot; + -: 1122: using ::hypotf; + -: 1123: using ::hypotl; + -: 1124: + -: 1125: using ::ilogb; + -: 1126: using ::ilogbf; + -: 1127: using ::ilogbl; + -: 1128: + -: 1129: using ::lgamma; + -: 1130: using ::lgammaf; + -: 1131: using ::lgammal; + -: 1132: + -: 1133:#ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS + -: 1134: using ::llrint; + -: 1135: using ::llrintf; + -: 1136: using ::llrintl; + -: 1137: + -: 1138: using ::llround; + -: 1139: using ::llroundf; + -: 1140: using ::llroundl; + -: 1141:#endif + -: 1142: + -: 1143: using ::log1p; + -: 1144: using ::log1pf; + -: 1145: using ::log1pl; + -: 1146: + -: 1147: using ::log2; + -: 1148: using ::log2f; + -: 1149: using ::log2l; + -: 1150: + -: 1151: using ::logb; + -: 1152: using ::logbf; + -: 1153: using ::logbl; + -: 1154: + -: 1155: using ::lrint; + -: 1156: using ::lrintf; + -: 1157: using ::lrintl; + -: 1158: + -: 1159: using ::lround; + -: 1160: using ::lroundf; + -: 1161: using ::lroundl; + -: 1162: + -: 1163: using ::nan; + -: 1164: using ::nanf; + -: 1165: using ::nanl; + -: 1166: + -: 1167: using ::nearbyint; + -: 1168: using ::nearbyintf; + -: 1169: using ::nearbyintl; + -: 1170: + -: 1171: using ::nextafter; + -: 1172: using ::nextafterf; + -: 1173: using ::nextafterl; + -: 1174: + -: 1175: using ::nexttoward; + -: 1176: using ::nexttowardf; + -: 1177: using ::nexttowardl; + -: 1178: + -: 1179: using ::remainder; + -: 1180: using ::remainderf; + -: 1181: using ::remainderl; + -: 1182: + -: 1183: using ::remquo; + -: 1184: using ::remquof; + -: 1185: using ::remquol; + -: 1186: + -: 1187: using ::rint; + -: 1188: using ::rintf; + -: 1189: using ::rintl; + -: 1190: + -: 1191: using ::round; + -: 1192: using ::roundf; + -: 1193: using ::roundl; + -: 1194: + -: 1195: using ::scalbln; + -: 1196: using ::scalblnf; + -: 1197: using ::scalblnl; + -: 1198: + -: 1199: using ::scalbn; + -: 1200: using ::scalbnf; + -: 1201: using ::scalbnl; + -: 1202: + -: 1203: using ::tgamma; + -: 1204: using ::tgammaf; + -: 1205: using ::tgammal; + -: 1206: + -: 1207: using ::trunc; + -: 1208: using ::truncf; + -: 1209: using ::truncl; + -: 1210: + -: 1211: /// Additional overloads. + -: 1212:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1213: constexpr float + -: 1214: acosh(float __x) + -: 1215: { return __builtin_acoshf(__x); } + -: 1216: + -: 1217: constexpr long double + -: 1218: acosh(long double __x) + -: 1219: { return __builtin_acoshl(__x); } + -: 1220:#endif + -: 1221: + -: 1222:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1223: template + -: 1224: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1225: double>::__type + -: 1226: acosh(_Tp __x) + -: 1227: { return __builtin_acosh(__x); } + -: 1228:#endif + -: 1229: + -: 1230:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1231: constexpr float + -: 1232: asinh(float __x) + -: 1233: { return __builtin_asinhf(__x); } + -: 1234: + -: 1235: constexpr long double + -: 1236: asinh(long double __x) + -: 1237: { return __builtin_asinhl(__x); } + -: 1238:#endif + -: 1239: + -: 1240:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1241: template + -: 1242: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1243: double>::__type + -: 1244: asinh(_Tp __x) + -: 1245: { return __builtin_asinh(__x); } + -: 1246:#endif + -: 1247: + -: 1248:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1249: constexpr float + -: 1250: atanh(float __x) + -: 1251: { return __builtin_atanhf(__x); } + -: 1252: + -: 1253: constexpr long double + -: 1254: atanh(long double __x) + -: 1255: { return __builtin_atanhl(__x); } + -: 1256:#endif + -: 1257: + -: 1258:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1259: template + -: 1260: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1261: double>::__type + -: 1262: atanh(_Tp __x) + -: 1263: { return __builtin_atanh(__x); } + -: 1264:#endif + -: 1265: + -: 1266:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1267: constexpr float + -: 1268: cbrt(float __x) + -: 1269: { return __builtin_cbrtf(__x); } + -: 1270: + -: 1271: constexpr long double + -: 1272: cbrt(long double __x) + -: 1273: { return __builtin_cbrtl(__x); } + -: 1274:#endif + -: 1275: + -: 1276:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1277: template + -: 1278: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1279: double>::__type + -: 1280: cbrt(_Tp __x) + -: 1281: { return __builtin_cbrt(__x); } + -: 1282:#endif + -: 1283: + -: 1284:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1285: constexpr float + -: 1286: copysign(float __x, float __y) + -: 1287: { return __builtin_copysignf(__x, __y); } + -: 1288: + -: 1289: constexpr long double + -: 1290: copysign(long double __x, long double __y) + -: 1291: { return __builtin_copysignl(__x, __y); } + -: 1292:#endif + -: 1293: + -: 1294:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1295: template + -: 1296: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1297: copysign(_Tp __x, _Up __y) + -: 1298: { + -: 1299: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1300: return copysign(__type(__x), __type(__y)); + -: 1301: } + -: 1302:#endif + -: 1303: + -: 1304:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1305: constexpr float + -: 1306: erf(float __x) + -: 1307: { return __builtin_erff(__x); } + -: 1308: + -: 1309: constexpr long double + -: 1310: erf(long double __x) + -: 1311: { return __builtin_erfl(__x); } + -: 1312:#endif + -: 1313: + -: 1314:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1315: template + -: 1316: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1317: double>::__type + -: 1318: erf(_Tp __x) + -: 1319: { return __builtin_erf(__x); } + -: 1320:#endif + -: 1321: + -: 1322:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1323: constexpr float + -: 1324: erfc(float __x) + -: 1325: { return __builtin_erfcf(__x); } + -: 1326: + -: 1327: constexpr long double + -: 1328: erfc(long double __x) + -: 1329: { return __builtin_erfcl(__x); } + -: 1330:#endif + -: 1331: + -: 1332:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1333: template + -: 1334: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1335: double>::__type + -: 1336: erfc(_Tp __x) + -: 1337: { return __builtin_erfc(__x); } + -: 1338:#endif + -: 1339: + -: 1340:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1341: constexpr float + -: 1342: exp2(float __x) + -: 1343: { return __builtin_exp2f(__x); } + -: 1344: + -: 1345: constexpr long double + -: 1346: exp2(long double __x) + -: 1347: { return __builtin_exp2l(__x); } + -: 1348:#endif + -: 1349: + -: 1350:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1351: template + -: 1352: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1353: double>::__type + -: 1354: exp2(_Tp __x) + -: 1355: { return __builtin_exp2(__x); } + -: 1356:#endif + -: 1357: + -: 1358:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1359: constexpr float + -: 1360: expm1(float __x) + -: 1361: { return __builtin_expm1f(__x); } + -: 1362: + -: 1363: constexpr long double + -: 1364: expm1(long double __x) + -: 1365: { return __builtin_expm1l(__x); } + -: 1366:#endif + -: 1367: + -: 1368:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1369: template + -: 1370: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1371: double>::__type + -: 1372: expm1(_Tp __x) + -: 1373: { return __builtin_expm1(__x); } + -: 1374:#endif + -: 1375: + -: 1376:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1377: constexpr float + -: 1378: fdim(float __x, float __y) + -: 1379: { return __builtin_fdimf(__x, __y); } + -: 1380: + -: 1381: constexpr long double + -: 1382: fdim(long double __x, long double __y) + -: 1383: { return __builtin_fdiml(__x, __y); } + -: 1384:#endif + -: 1385: + -: 1386:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1387: template + -: 1388: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1389: fdim(_Tp __x, _Up __y) + -: 1390: { + -: 1391: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1392: return fdim(__type(__x), __type(__y)); + -: 1393: } + -: 1394:#endif + -: 1395: + -: 1396:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1397: constexpr float + -: 1398: fma(float __x, float __y, float __z) + -: 1399: { return __builtin_fmaf(__x, __y, __z); } + -: 1400: + -: 1401: constexpr long double + -: 1402: fma(long double __x, long double __y, long double __z) + -: 1403: { return __builtin_fmal(__x, __y, __z); } + -: 1404:#endif + -: 1405: + -: 1406:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1407: template + -: 1408: constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type + -: 1409: fma(_Tp __x, _Up __y, _Vp __z) + -: 1410: { + -: 1411: typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type; + -: 1412: return fma(__type(__x), __type(__y), __type(__z)); + -: 1413: } + -: 1414:#endif + -: 1415: + -: 1416:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1417: constexpr float + -: 1418: fmax(float __x, float __y) + -: 1419: { return __builtin_fmaxf(__x, __y); } + -: 1420: + -: 1421: constexpr long double + -: 1422: fmax(long double __x, long double __y) + -: 1423: { return __builtin_fmaxl(__x, __y); } + -: 1424:#endif + -: 1425: + -: 1426:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1427: template + -: 1428: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1429: fmax(_Tp __x, _Up __y) + -: 1430: { + -: 1431: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1432: return fmax(__type(__x), __type(__y)); + -: 1433: } + -: 1434:#endif + -: 1435: + -: 1436:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1437: constexpr float + -: 1438: fmin(float __x, float __y) + -: 1439: { return __builtin_fminf(__x, __y); } + -: 1440: + -: 1441: constexpr long double + -: 1442: fmin(long double __x, long double __y) + -: 1443: { return __builtin_fminl(__x, __y); } + -: 1444:#endif + -: 1445: + -: 1446:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1447: template + -: 1448: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1449: fmin(_Tp __x, _Up __y) + -: 1450: { + -: 1451: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1452: return fmin(__type(__x), __type(__y)); + -: 1453: } + -: 1454:#endif + -: 1455: + -: 1456:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1457: constexpr float + -: 1458: hypot(float __x, float __y) + -: 1459: { return __builtin_hypotf(__x, __y); } + -: 1460: + -: 1461: constexpr long double + -: 1462: hypot(long double __x, long double __y) + -: 1463: { return __builtin_hypotl(__x, __y); } + -: 1464:#endif + -: 1465: + -: 1466:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1467: template + -: 1468: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1469: hypot(_Tp __x, _Up __y) + -: 1470: { + -: 1471: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1472: return hypot(__type(__x), __type(__y)); + -: 1473: } + -: 1474:#endif + -: 1475: + -: 1476:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1477: constexpr int + -: 1478: ilogb(float __x) + -: 1479: { return __builtin_ilogbf(__x); } + -: 1480: + -: 1481: constexpr int + -: 1482: ilogb(long double __x) + -: 1483: { return __builtin_ilogbl(__x); } + -: 1484:#endif + -: 1485: + -: 1486:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1487: template + -: 1488: constexpr + -: 1489: typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1490: int>::__type + -: 1491: ilogb(_Tp __x) + -: 1492: { return __builtin_ilogb(__x); } + -: 1493:#endif + -: 1494: + -: 1495:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1496: constexpr float + -: 1497: lgamma(float __x) + -: 1498: { return __builtin_lgammaf(__x); } + -: 1499: + -: 1500: constexpr long double + -: 1501: lgamma(long double __x) + -: 1502: { return __builtin_lgammal(__x); } + -: 1503:#endif + -: 1504: + -: 1505:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1506: template + -: 1507: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1508: double>::__type + -: 1509: lgamma(_Tp __x) + -: 1510: { return __builtin_lgamma(__x); } + -: 1511:#endif + -: 1512: + -: 1513:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1514: constexpr long long + -: 1515: llrint(float __x) + -: 1516: { return __builtin_llrintf(__x); } + -: 1517: + -: 1518: constexpr long long + -: 1519: llrint(long double __x) + -: 1520: { return __builtin_llrintl(__x); } + -: 1521:#endif + -: 1522: + -: 1523:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1524: template + -: 1525: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1526: long long>::__type + -: 1527: llrint(_Tp __x) + -: 1528: { return __builtin_llrint(__x); } + -: 1529:#endif + -: 1530: + -: 1531:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1532: constexpr long long + -: 1533: llround(float __x) + -: 1534: { return __builtin_llroundf(__x); } + -: 1535: + -: 1536: constexpr long long + -: 1537: llround(long double __x) + -: 1538: { return __builtin_llroundl(__x); } + -: 1539:#endif + -: 1540: + -: 1541:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1542: template + -: 1543: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1544: long long>::__type + -: 1545: llround(_Tp __x) + -: 1546: { return __builtin_llround(__x); } + -: 1547:#endif + -: 1548: + -: 1549:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1550: constexpr float + -: 1551: log1p(float __x) + -: 1552: { return __builtin_log1pf(__x); } + -: 1553: + -: 1554: constexpr long double + -: 1555: log1p(long double __x) + -: 1556: { return __builtin_log1pl(__x); } + -: 1557:#endif + -: 1558: + -: 1559:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1560: template + -: 1561: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1562: double>::__type + -: 1563: log1p(_Tp __x) + -: 1564: { return __builtin_log1p(__x); } + -: 1565:#endif + -: 1566: + -: 1567:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1568: // DR 568. + -: 1569: constexpr float + -: 1570: log2(float __x) + -: 1571: { return __builtin_log2f(__x); } + -: 1572: + -: 1573: constexpr long double + -: 1574: log2(long double __x) + -: 1575: { return __builtin_log2l(__x); } + -: 1576:#endif + -: 1577: + -: 1578:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1579: template + -: 1580: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1581: double>::__type + -: 1582: log2(_Tp __x) + -: 1583: { return __builtin_log2(__x); } + -: 1584:#endif + -: 1585: + -: 1586:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1587: constexpr float + -: 1588: logb(float __x) + -: 1589: { return __builtin_logbf(__x); } + -: 1590: + -: 1591: constexpr long double + -: 1592: logb(long double __x) + -: 1593: { return __builtin_logbl(__x); } + -: 1594:#endif + -: 1595: + -: 1596:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1597: template + -: 1598: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1599: double>::__type + -: 1600: logb(_Tp __x) + -: 1601: { return __builtin_logb(__x); } + -: 1602:#endif + -: 1603: + -: 1604:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1605: constexpr long + -: 1606: lrint(float __x) + -: 1607: { return __builtin_lrintf(__x); } + -: 1608: + -: 1609: constexpr long + -: 1610: lrint(long double __x) + -: 1611: { return __builtin_lrintl(__x); } + -: 1612:#endif + -: 1613: + -: 1614:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1615: template + -: 1616: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1617: long>::__type + -: 1618: lrint(_Tp __x) + -: 1619: { return __builtin_lrint(__x); } + -: 1620:#endif + -: 1621: + -: 1622:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1623: constexpr long + -: 1624: lround(float __x) + -: 1625: { return __builtin_lroundf(__x); } + -: 1626: + -: 1627: constexpr long + -: 1628: lround(long double __x) + -: 1629: { return __builtin_lroundl(__x); } + -: 1630:#endif + -: 1631: + -: 1632:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1633: template + -: 1634: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1635: long>::__type + -: 1636: lround(_Tp __x) + -: 1637: { return __builtin_lround(__x); } + -: 1638:#endif + -: 1639: + -: 1640:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1641: constexpr float + -: 1642: nearbyint(float __x) + -: 1643: { return __builtin_nearbyintf(__x); } + -: 1644: + -: 1645: constexpr long double + -: 1646: nearbyint(long double __x) + -: 1647: { return __builtin_nearbyintl(__x); } + -: 1648:#endif + -: 1649: + -: 1650:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1651: template + -: 1652: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1653: double>::__type + -: 1654: nearbyint(_Tp __x) + -: 1655: { return __builtin_nearbyint(__x); } + -: 1656:#endif + -: 1657: + -: 1658:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1659: constexpr float + -: 1660: nextafter(float __x, float __y) + -: 1661: { return __builtin_nextafterf(__x, __y); } + -: 1662: + -: 1663: constexpr long double + -: 1664: nextafter(long double __x, long double __y) + -: 1665: { return __builtin_nextafterl(__x, __y); } + -: 1666:#endif + -: 1667: + -: 1668:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1669: template + -: 1670: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1671: nextafter(_Tp __x, _Up __y) + -: 1672: { + -: 1673: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1674: return nextafter(__type(__x), __type(__y)); + -: 1675: } + -: 1676:#endif + -: 1677: + -: 1678:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1679: constexpr float + -: 1680: nexttoward(float __x, long double __y) + -: 1681: { return __builtin_nexttowardf(__x, __y); } + -: 1682: + -: 1683: constexpr long double + -: 1684: nexttoward(long double __x, long double __y) + -: 1685: { return __builtin_nexttowardl(__x, __y); } + -: 1686:#endif + -: 1687: + -: 1688:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1689: template + -: 1690: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1691: double>::__type + -: 1692: nexttoward(_Tp __x, long double __y) + -: 1693: { return __builtin_nexttoward(__x, __y); } + -: 1694:#endif + -: 1695: + -: 1696:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1697: constexpr float + -: 1698: remainder(float __x, float __y) + -: 1699: { return __builtin_remainderf(__x, __y); } + -: 1700: + -: 1701: constexpr long double + -: 1702: remainder(long double __x, long double __y) + -: 1703: { return __builtin_remainderl(__x, __y); } + -: 1704:#endif + -: 1705: + -: 1706:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1707: template + -: 1708: constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1709: remainder(_Tp __x, _Up __y) + -: 1710: { + -: 1711: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1712: return remainder(__type(__x), __type(__y)); + -: 1713: } + -: 1714:#endif + -: 1715: + -: 1716:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1717: inline float + -: 1718: remquo(float __x, float __y, int* __pquo) + -: 1719: { return __builtin_remquof(__x, __y, __pquo); } + -: 1720: + -: 1721: inline long double + -: 1722: remquo(long double __x, long double __y, int* __pquo) + -: 1723: { return __builtin_remquol(__x, __y, __pquo); } + -: 1724:#endif + -: 1725: + -: 1726:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1727: template + -: 1728: inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type + -: 1729: remquo(_Tp __x, _Up __y, int* __pquo) + -: 1730: { + -: 1731: typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type; + -: 1732: return remquo(__type(__x), __type(__y), __pquo); + -: 1733: } + -: 1734:#endif + -: 1735: + -: 1736:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1737: constexpr float + -: 1738: rint(float __x) + -: 1739: { return __builtin_rintf(__x); } + -: 1740: + -: 1741: constexpr long double + -: 1742: rint(long double __x) + -: 1743: { return __builtin_rintl(__x); } + -: 1744:#endif + -: 1745: + -: 1746:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1747: template + -: 1748: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1749: double>::__type + -: 1750: rint(_Tp __x) + -: 1751: { return __builtin_rint(__x); } + -: 1752:#endif + -: 1753: + -: 1754:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1755: constexpr float + -: 1756: round(float __x) + -: 1757: { return __builtin_roundf(__x); } + -: 1758: + -: 1759: constexpr long double + -: 1760: round(long double __x) + -: 1761: { return __builtin_roundl(__x); } + -: 1762:#endif + -: 1763: + -: 1764:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1765: template + -: 1766: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1767: double>::__type + -: 1768: round(_Tp __x) + -: 1769: { return __builtin_round(__x); } + -: 1770:#endif + -: 1771: + -: 1772:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1773: constexpr float + -: 1774: scalbln(float __x, long __ex) + -: 1775: { return __builtin_scalblnf(__x, __ex); } + -: 1776: + -: 1777: constexpr long double + -: 1778: scalbln(long double __x, long __ex) + -: 1779: { return __builtin_scalblnl(__x, __ex); } + -: 1780:#endif + -: 1781: + -: 1782:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1783: template + -: 1784: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1785: double>::__type + -: 1786: scalbln(_Tp __x, long __ex) + -: 1787: { return __builtin_scalbln(__x, __ex); } + -: 1788:#endif + -: 1789: + -: 1790:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1791: constexpr float + -: 1792: scalbn(float __x, int __ex) + -: 1793: { return __builtin_scalbnf(__x, __ex); } + -: 1794: + -: 1795: constexpr long double + -: 1796: scalbn(long double __x, int __ex) + -: 1797: { return __builtin_scalbnl(__x, __ex); } + -: 1798:#endif + -: 1799: + -: 1800:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1801: template + -: 1802: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1803: double>::__type + -: 1804: scalbn(_Tp __x, int __ex) + -: 1805: { return __builtin_scalbn(__x, __ex); } + -: 1806:#endif + -: 1807: + -: 1808:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1809: constexpr float + -: 1810: tgamma(float __x) + -: 1811: { return __builtin_tgammaf(__x); } + -: 1812: + -: 1813: constexpr long double + -: 1814: tgamma(long double __x) + -: 1815: { return __builtin_tgammal(__x); } + -: 1816:#endif + -: 1817: + -: 1818:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1819: template + -: 1820: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1821: double>::__type + -: 1822: tgamma(_Tp __x) + -: 1823: { return __builtin_tgamma(__x); } + -: 1824:#endif + -: 1825: + -: 1826:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP + -: 1827: constexpr float + -: 1828: trunc(float __x) + -: 1829: { return __builtin_truncf(__x); } + -: 1830: + -: 1831: constexpr long double + -: 1832: trunc(long double __x) + -: 1833: { return __builtin_truncl(__x); } + -: 1834:#endif + -: 1835: + -: 1836:#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT + -: 1837: template + -: 1838: constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, + -: 1839: double>::__type + -: 1840: trunc(_Tp __x) + -: 1841: { return __builtin_trunc(__x); } + -: 1842:#endif + -: 1843: + -: 1844:#endif // _GLIBCXX_USE_C99_MATH_TR1 + -: 1845:#endif // C++11 + -: 1846: + -: 1847:#if __cplusplus >= 201703L + -: 1848: + -: 1849: // [c.math.hypot3], three-dimensional hypotenuse + -: 1850:#define __cpp_lib_hypot 201603L + -: 1851: + -: 1852: template + -: 1853: inline _Tp + -: 1854: __hypot3(_Tp __x, _Tp __y, _Tp __z) + -: 1855: { + -: 1856: __x = std::abs(__x); + -: 1857: __y = std::abs(__y); + -: 1858: __z = std::abs(__z); + -: 1859: if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x) + -: 1860: return __a * std::sqrt((__x / __a) * (__x / __a) + -: 1861: + (__y / __a) * (__y / __a) + -: 1862: + (__z / __a) * (__z / __a)); + -: 1863: else + -: 1864: return {}; + -: 1865: } + -: 1866: + -: 1867: inline float + -: 1868: hypot(float __x, float __y, float __z) + -: 1869: { return std::__hypot3(__x, __y, __z); } + -: 1870: + -: 1871: inline double + -: 1872: hypot(double __x, double __y, double __z) + -: 1873: { return std::__hypot3(__x, __y, __z); } + -: 1874: + -: 1875: inline long double + -: 1876: hypot(long double __x, long double __y, long double __z) + -: 1877: { return std::__hypot3(__x, __y, __z); } + -: 1878: + -: 1879: template + -: 1880: __gnu_cxx::__promoted_t<_Tp, _Up, _Vp> + -: 1881: hypot(_Tp __x, _Up __y, _Vp __z) + -: 1882: { + -: 1883: using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>; + -: 1884: return std::__hypot3<__type>(__x, __y, __z); + -: 1885: } + -: 1886:#endif // C++17 + -: 1887: + -: 1888:#if __cplusplus >= 202002L + -: 1889: // linear interpolation + -: 1890:# define __cpp_lib_interpolate 201902L + -: 1891: + -: 1892: template + -: 1893: constexpr _Fp + -: 1894: __lerp(_Fp __a, _Fp __b, _Fp __t) noexcept + -: 1895: { + -: 1896: if ((__a <= 0 && __b >= 0) || (__a >= 0 && __b <= 0)) + -: 1897: return __t * __b + (1 - __t) * __a; + -: 1898: + -: 1899: if (__t == 1) + -: 1900: return __b; // exact + -: 1901: + -: 1902: // Exact at __t=0, monotonic except near __t=1, + -: 1903: // bounded, determinate, and consistent: + -: 1904: const _Fp __x = __a + __t * (__b - __a); + -: 1905: return (__t > 1) == (__b > __a) + -: 1906: ? (__b < __x ? __x : __b) + -: 1907: : (__b > __x ? __x : __b); // monotonic near __t=1 + -: 1908: } + -: 1909: + -: 1910: constexpr float + -: 1911: lerp(float __a, float __b, float __t) noexcept + -: 1912: { return std::__lerp(__a, __b, __t); } + -: 1913: + -: 1914: constexpr double + -: 1915: lerp(double __a, double __b, double __t) noexcept + -: 1916: { return std::__lerp(__a, __b, __t); } + -: 1917: + -: 1918: constexpr long double + -: 1919: lerp(long double __a, long double __b, long double __t) noexcept + -: 1920: { return std::__lerp(__a, __b, __t); } + -: 1921: + -: 1922: template + -: 1923: constexpr __gnu_cxx::__promoted_t<_Tp, _Up, _Vp> + -: 1924: lerp(_Tp __x, _Up __y, _Vp __z) noexcept + -: 1925: { + -: 1926: using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>; + -: 1927: return std::__lerp<__type>(__x, __y, __z); + -: 1928: } + -: 1929:#endif // C++20 + -: 1930: + -: 1931:_GLIBCXX_END_NAMESPACE_VERSION + -: 1932:} // namespace + -: 1933: + -: 1934:#if _GLIBCXX_USE_STD_SPEC_FUNCS + -: 1935:# include + -: 1936:#endif + -: 1937: + -: 1938:} // extern "C++" + -: 1939: + -: 1940:#endif diff --git a/sphere.cc.gcov b/sphere.cc.gcov new file mode 100644 index 0000000..df2f123 --- /dev/null +++ b/sphere.cc.gcov @@ -0,0 +1,103 @@ + -: 0:Source:/Users/chenyuehon/gitRepos/gtest_exercise/src/sphere.cc + -: 0:Graph:/Users/chenyuehon/gitRepos/gtest_exercise/build/src/CMakeFiles/sphere.dir/sphere.cc.gcno + -: 0:Data:/Users/chenyuehon/gitRepos/gtest_exercise/build/src/CMakeFiles/sphere.dir/sphere.cc.gcda + -: 0:Runs:1 + -: 1:#include "sphere.h" + -: 2: + -: 3:#include + -: 4:#include + -: 5:using namespace std; + -: 6: + 1*: 7:Sphere::Sphere() { + 1*: 8: this->orig_x = 0.0; + 1*: 9: this->orig_y = 0.0; + 1*: 10: this->orig_z = 0.0; + 1*: 11: this->radius = 0.0; + 1*: 12:} +------------------ +_ZN6SphereC1Ev: + 1: 7:Sphere::Sphere() { + 1: 8: this->orig_x = 0.0; + 1: 9: this->orig_y = 0.0; + 1: 10: this->orig_z = 0.0; + 1: 11: this->radius = 0.0; + 1: 12:} +------------------ +_ZN6SphereC2Ev: + #####: 7:Sphere::Sphere() { + #####: 8: this->orig_x = 0.0; + #####: 9: this->orig_y = 0.0; + #####: 10: this->orig_z = 0.0; + #####: 11: this->radius = 0.0; + #####: 12:} +------------------ + -: 13: + 1*: 14:Sphere::Sphere(float ox, float oy, float oz, float rad) { + 1*: 15: this->orig_x = ox; + 1*: 16: this->orig_y = oy; + 1*: 17: this->orig_z = oz; + 1*: 18: if (rad >= 0) + 1*: 19: this->radius = rad; + -: 20: else + #####: 21: this->radius = 0; + 1*: 22:} +------------------ +_ZN6SphereC1Effff: + 1: 14:Sphere::Sphere(float ox, float oy, float oz, float rad) { + 1: 15: this->orig_x = ox; + 1: 16: this->orig_y = oy; + 1: 17: this->orig_z = oz; + 1: 18: if (rad >= 0) + 1: 19: this->radius = rad; + -: 20: else + #####: 21: this->radius = 0; + 1: 22:} +------------------ +_ZN6SphereC2Effff: + #####: 14:Sphere::Sphere(float ox, float oy, float oz, float rad) { + #####: 15: this->orig_x = ox; + #####: 16: this->orig_y = oy; + #####: 17: this->orig_z = oz; + #####: 18: if (rad >= 0) + #####: 19: this->radius = rad; + -: 20: else + #####: 21: this->radius = 0; + #####: 22:} +------------------ + -: 23: + 6: 24:float* Sphere::getOrigin() { + 6: 25: float* result = new float[3]{this->orig_x, this->orig_y, this->orig_z}; + 6: 26: return result; + -: 27:} + -: 28: + 2: 29:float Sphere::getRadius() { + 2: 30: return this->radius; + -: 31:} + -: 32: + 1: 33:void Sphere::setOrigin(float ox, float oy, float oz) { + 1: 34: this->orig_x = ox; + 1: 35: this->orig_y = oy; + 1: 36: this->orig_z = oy; + 1: 37:} + -: 38: + 1: 39:void Sphere::setRadius(float rad) { + 1: 40: this->radius = 0; + 1: 41:} + -: 42: + #####: 43:bool Sphere::intersect(Sphere& other) { + #####: 44: float dist = sqrt(pow(this->orig_x - other.orig_x, 2) + pow(this->orig_y - other.orig_y, 2) + pow(this->orig_z - other.orig_z, 2)); + #####: 45: return true; + -: 46:} + -: 47: + #####: 48:float Sphere::SurfaceArea() { + #####: 49: return 4 * M_PI * pow(this->radius, 2); + -: 50:} + -: 51: + #####: 52:float Sphere::Volume() { + #####: 53: return (4 / 3) * M_PI * pow(this->radius, 2); + -: 54:} + -: 55: + #####: 56:ostream& operator<<(ostream& os, const Sphere& sphere) { + #####: 57: os << "[( " << sphere.orig_x << ", " << sphere.orig_y << ", " << sphere.orig_z << "), " << sphere.radius << "]"; + #####: 58: return os; + -: 59:}