| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704 |
- // -*- C++ -*- C forwarding header.
- // Copyright (C) 1997-2023 Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
- // software; you can redistribute it and/or modify it under the
- // terms of the GNU General Public License as published by the
- // Free Software Foundation; either version 3, or (at your option)
- // any later version.
- // This library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- // Under Section 7 of GPL version 3, you are granted additional
- // permissions described in the GCC Runtime Library Exception, version
- // 3.1, as published by the Free Software Foundation.
- // You should have received a copy of the GNU General Public License and
- // a copy of the GCC Runtime Library Exception along with this program;
- // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- // <http://www.gnu.org/licenses/>.
- /** @file include/cmath
- * This is a Standard C++ Library file. You should @c \#include this file
- * in your programs, rather than any of the @a *.h implementation files.
- *
- * This is the C++ version of the Standard C Library header @c math.h,
- * and its contents are (mostly) the same as that header, but are all
- * contained in the namespace @c std (except for names which are defined
- * as macros in C).
- */
- //
- // ISO C++ 14882: 26.5 C library
- //
- #pragma GCC system_header
- #include <bits/requires_hosted.h>
- #include <bits/c++config.h>
- #include <bits/cpp_type_traits.h>
- #include <ext/type_traits.h>
- #define _GLIBCXX_INCLUDE_NEXT_C_HEADERS
- #include_next <math.h>
- #undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS
- #include <bits/std_abs.h>
- #ifndef _GLIBCXX_CMATH
- #define _GLIBCXX_CMATH 1
- // Get rid of those macros defined in <math.h> in lieu of real functions.
- #undef div
- #undef acos
- #undef asin
- #undef atan
- #undef atan2
- #undef ceil
- #undef cos
- #undef cosh
- #undef exp
- #undef fabs
- #undef floor
- #undef fmod
- #undef frexp
- #undef ldexp
- #undef log
- #undef log10
- #undef modf
- #undef pow
- #undef sin
- #undef sinh
- #undef sqrt
- #undef tan
- #undef tanh
- extern "C++"
- {
- namespace std _GLIBCXX_VISIBILITY(default)
- {
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
- using ::acos;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- acos(float __x)
- { return __builtin_acosf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- acos(long double __x)
- { return __builtin_acosl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- acos(_Tp __x)
- { return __builtin_acos(__x); }
- using ::asin;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- asin(float __x)
- { return __builtin_asinf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- asin(long double __x)
- { return __builtin_asinl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- asin(_Tp __x)
- { return __builtin_asin(__x); }
- using ::atan;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- atan(float __x)
- { return __builtin_atanf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- atan(long double __x)
- { return __builtin_atanl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- atan(_Tp __x)
- { return __builtin_atan(__x); }
- using ::atan2;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- atan2(float __y, float __x)
- { return __builtin_atan2f(__y, __x); }
- inline _GLIBCXX_CONSTEXPR long double
- atan2(long double __y, long double __x)
- { return __builtin_atan2l(__y, __x); }
- #endif
- using ::ceil;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- ceil(float __x)
- { return __builtin_ceilf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- ceil(long double __x)
- { return __builtin_ceill(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- ceil(_Tp __x)
- { return __builtin_ceil(__x); }
- using ::cos;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- cos(float __x)
- { return __builtin_cosf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- cos(long double __x)
- { return __builtin_cosl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- cos(_Tp __x)
- { return __builtin_cos(__x); }
- using ::cosh;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- cosh(float __x)
- { return __builtin_coshf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- cosh(long double __x)
- { return __builtin_coshl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- cosh(_Tp __x)
- { return __builtin_cosh(__x); }
- using ::exp;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- exp(float __x)
- { return __builtin_expf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- exp(long double __x)
- { return __builtin_expl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- exp(_Tp __x)
- { return __builtin_exp(__x); }
- using ::fabs;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- fabs(float __x)
- { return __builtin_fabsf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- fabs(long double __x)
- { return __builtin_fabsl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- fabs(_Tp __x)
- { return __builtin_fabs(__x); }
- using ::floor;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- floor(float __x)
- { return __builtin_floorf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- floor(long double __x)
- { return __builtin_floorl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- floor(_Tp __x)
- { return __builtin_floor(__x); }
- using ::fmod;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- fmod(float __x, float __y)
- { return __builtin_fmodf(__x, __y); }
- inline _GLIBCXX_CONSTEXPR long double
- fmod(long double __x, long double __y)
- { return __builtin_fmodl(__x, __y); }
- #endif
- using ::frexp;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline float
- frexp(float __x, int* __exp)
- { return __builtin_frexpf(__x, __exp); }
- inline long double
- frexp(long double __x, int* __exp)
- { return __builtin_frexpl(__x, __exp); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- frexp(_Tp __x, int* __exp)
- { return __builtin_frexp(__x, __exp); }
- using ::ldexp;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- ldexp(float __x, int __exp)
- { return __builtin_ldexpf(__x, __exp); }
- inline _GLIBCXX_CONSTEXPR long double
- ldexp(long double __x, int __exp)
- { return __builtin_ldexpl(__x, __exp); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- ldexp(_Tp __x, int __exp)
- { return __builtin_ldexp(__x, __exp); }
- using ::log;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- log(float __x)
- { return __builtin_logf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- log(long double __x)
- { return __builtin_logl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- log(_Tp __x)
- { return __builtin_log(__x); }
- using ::log10;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- log10(float __x)
- { return __builtin_log10f(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- log10(long double __x)
- { return __builtin_log10l(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- log10(_Tp __x)
- { return __builtin_log10(__x); }
- using ::modf;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline float
- modf(float __x, float* __iptr)
- { return __builtin_modff(__x, __iptr); }
- inline long double
- modf(long double __x, long double* __iptr)
- { return __builtin_modfl(__x, __iptr); }
- #endif
- using ::pow;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- pow(float __x, float __y)
- { return __builtin_powf(__x, __y); }
- inline _GLIBCXX_CONSTEXPR long double
- pow(long double __x, long double __y)
- { return __builtin_powl(__x, __y); }
- #if __cplusplus < 201103L
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
- // DR 550. What should the return type of pow(float,int) be?
- inline double
- pow(double __x, int __i)
- { return __builtin_powi(__x, __i); }
- inline float
- pow(float __x, int __n)
- { return __builtin_powif(__x, __n); }
- inline long double
- pow(long double __x, int __n)
- { return __builtin_powil(__x, __n); }
- #endif
- #endif
- using ::sin;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- sin(float __x)
- { return __builtin_sinf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- sin(long double __x)
- { return __builtin_sinl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- sin(_Tp __x)
- { return __builtin_sin(__x); }
- using ::sinh;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- sinh(float __x)
- { return __builtin_sinhf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- sinh(long double __x)
- { return __builtin_sinhl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- sinh(_Tp __x)
- { return __builtin_sinh(__x); }
- using ::sqrt;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- sqrt(float __x)
- { return __builtin_sqrtf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- sqrt(long double __x)
- { return __builtin_sqrtl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- sqrt(_Tp __x)
- { return __builtin_sqrt(__x); }
- using ::tan;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- tan(float __x)
- { return __builtin_tanf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- tan(long double __x)
- { return __builtin_tanl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- tan(_Tp __x)
- { return __builtin_tan(__x); }
- using ::tanh;
- #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO
- inline _GLIBCXX_CONSTEXPR float
- tanh(float __x)
- { return __builtin_tanhf(__x); }
- inline _GLIBCXX_CONSTEXPR long double
- tanh(long double __x)
- { return __builtin_tanhl(__x); }
- #endif
- template<typename _Tp>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- tanh(_Tp __x)
- { return __builtin_tanh(__x); }
- #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- constexpr _Float16
- acos(_Float16 __x)
- { return _Float16(__builtin_acosf(__x)); }
- constexpr _Float16
- asin(_Float16 __x)
- { return _Float16(__builtin_asinf(__x)); }
- constexpr _Float16
- atan(_Float16 __x)
- { return _Float16(__builtin_atanf(__x)); }
- constexpr _Float16
- atan2(_Float16 __y, _Float16 __x)
- { return _Float16(__builtin_atan2f(__y, __x)); }
- constexpr _Float16
- ceil(_Float16 __x)
- { return _Float16(__builtin_ceilf(__x)); }
- constexpr _Float16
- cos(_Float16 __x)
- { return _Float16(__builtin_cosf(__x)); }
- constexpr _Float16
- cosh(_Float16 __x)
- { return _Float16(__builtin_coshf(__x)); }
- constexpr _Float16
- exp(_Float16 __x)
- { return _Float16(__builtin_expf(__x)); }
- constexpr _Float16
- fabs(_Float16 __x)
- { return _Float16(__builtin_fabsf(__x)); }
- constexpr _Float16
- floor(_Float16 __x)
- { return _Float16(__builtin_floorf(__x)); }
- constexpr _Float16
- fmod(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_fmodf(__x, __y)); }
- inline _Float16
- frexp(_Float16 __x, int* __exp)
- { return _Float16(__builtin_frexpf(__x, __exp)); }
- constexpr _Float16
- ldexp(_Float16 __x, int __exp)
- { return _Float16(__builtin_ldexpf(__x, __exp)); }
- constexpr _Float16
- log(_Float16 __x)
- { return _Float16(__builtin_logf(__x)); }
- constexpr _Float16
- log10(_Float16 __x)
- { return _Float16(__builtin_log10f(__x)); }
- inline _Float16
- modf(_Float16 __x, _Float16* __iptr)
- {
- float __i, __ret = __builtin_modff(__x, &__i);
- *__iptr = _Float16(__i);
- return _Float16(__ret);
- }
- constexpr _Float16
- pow(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_powf(__x, __y)); }
- constexpr _Float16
- sin(_Float16 __x)
- { return _Float16(__builtin_sinf(__x)); }
- constexpr _Float16
- sinh(_Float16 __x)
- { return _Float16(__builtin_sinhf(__x)); }
- constexpr _Float16
- sqrt(_Float16 __x)
- { return _Float16(__builtin_sqrtf(__x)); }
- constexpr _Float16
- tan(_Float16 __x)
- { return _Float16(__builtin_tanf(__x)); }
- constexpr _Float16
- tanh(_Float16 __x)
- { return _Float16(__builtin_tanhf(__x)); }
- #endif
- #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- constexpr _Float32
- acos(_Float32 __x)
- { return __builtin_acosf(__x); }
- constexpr _Float32
- asin(_Float32 __x)
- { return __builtin_asinf(__x); }
- constexpr _Float32
- atan(_Float32 __x)
- { return __builtin_atanf(__x); }
- constexpr _Float32
- atan2(_Float32 __y, _Float32 __x)
- { return __builtin_atan2f(__y, __x); }
- constexpr _Float32
- ceil(_Float32 __x)
- { return __builtin_ceilf(__x); }
- constexpr _Float32
- cos(_Float32 __x)
- { return __builtin_cosf(__x); }
- constexpr _Float32
- cosh(_Float32 __x)
- { return __builtin_coshf(__x); }
- constexpr _Float32
- exp(_Float32 __x)
- { return __builtin_expf(__x); }
- constexpr _Float32
- fabs(_Float32 __x)
- { return __builtin_fabsf(__x); }
- constexpr _Float32
- floor(_Float32 __x)
- { return __builtin_floorf(__x); }
- constexpr _Float32
- fmod(_Float32 __x, _Float32 __y)
- { return __builtin_fmodf(__x, __y); }
- inline _Float32
- frexp(_Float32 __x, int* __exp)
- { return __builtin_frexpf(__x, __exp); }
- constexpr _Float32
- ldexp(_Float32 __x, int __exp)
- { return __builtin_ldexpf(__x, __exp); }
- constexpr _Float32
- log(_Float32 __x)
- { return __builtin_logf(__x); }
- constexpr _Float32
- log10(_Float32 __x)
- { return __builtin_log10f(__x); }
- inline _Float32
- modf(_Float32 __x, _Float32* __iptr)
- {
- float __i, __ret = __builtin_modff(__x, &__i);
- *__iptr = __i;
- return __ret;
- }
- constexpr _Float32
- pow(_Float32 __x, _Float32 __y)
- { return __builtin_powf(__x, __y); }
- constexpr _Float32
- sin(_Float32 __x)
- { return __builtin_sinf(__x); }
- constexpr _Float32
- sinh(_Float32 __x)
- { return __builtin_sinhf(__x); }
- constexpr _Float32
- sqrt(_Float32 __x)
- { return __builtin_sqrtf(__x); }
- constexpr _Float32
- tan(_Float32 __x)
- { return __builtin_tanf(__x); }
- constexpr _Float32
- tanh(_Float32 __x)
- { return __builtin_tanhf(__x); }
- #endif
- #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
- constexpr _Float64
- acos(_Float64 __x)
- { return __builtin_acos(__x); }
- constexpr _Float64
- asin(_Float64 __x)
- { return __builtin_asin(__x); }
- constexpr _Float64
- atan(_Float64 __x)
- { return __builtin_atan(__x); }
- constexpr _Float64
- atan2(_Float64 __y, _Float64 __x)
- { return __builtin_atan2(__y, __x); }
- constexpr _Float64
- ceil(_Float64 __x)
- { return __builtin_ceil(__x); }
- constexpr _Float64
- cos(_Float64 __x)
- { return __builtin_cos(__x); }
- constexpr _Float64
- cosh(_Float64 __x)
- { return __builtin_cosh(__x); }
- constexpr _Float64
- exp(_Float64 __x)
- { return __builtin_exp(__x); }
- constexpr _Float64
- fabs(_Float64 __x)
- { return __builtin_fabs(__x); }
- constexpr _Float64
- floor(_Float64 __x)
- { return __builtin_floor(__x); }
- constexpr _Float64
- fmod(_Float64 __x, _Float64 __y)
- { return __builtin_fmod(__x, __y); }
- inline _Float64
- frexp(_Float64 __x, int* __exp)
- { return __builtin_frexp(__x, __exp); }
- constexpr _Float64
- ldexp(_Float64 __x, int __exp)
- { return __builtin_ldexp(__x, __exp); }
- constexpr _Float64
- log(_Float64 __x)
- { return __builtin_log(__x); }
- constexpr _Float64
- log10(_Float64 __x)
- { return __builtin_log10(__x); }
- inline _Float64
- modf(_Float64 __x, _Float64* __iptr)
- {
- double __i, __ret = __builtin_modf(__x, &__i);
- *__iptr = __i;
- return __ret;
- }
- constexpr _Float64
- pow(_Float64 __x, _Float64 __y)
- { return __builtin_pow(__x, __y); }
- constexpr _Float64
- sin(_Float64 __x)
- { return __builtin_sin(__x); }
- constexpr _Float64
- sinh(_Float64 __x)
- { return __builtin_sinh(__x); }
- constexpr _Float64
- sqrt(_Float64 __x)
- { return __builtin_sqrt(__x); }
- constexpr _Float64
- tan(_Float64 __x)
- { return __builtin_tan(__x); }
- constexpr _Float64
- tanh(_Float64 __x)
- { return __builtin_tanh(__x); }
- #endif
- #if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
- constexpr _Float128
- acos(_Float128 __x)
- { return __builtin_acosl(__x); }
- constexpr _Float128
- asin(_Float128 __x)
- { return __builtin_asinl(__x); }
- constexpr _Float128
- atan(_Float128 __x)
- { return __builtin_atanl(__x); }
- constexpr _Float128
- atan2(_Float128 __y, _Float128 __x)
- { return __builtin_atan2l(__y, __x); }
- constexpr _Float128
- ceil(_Float128 __x)
- { return __builtin_ceill(__x); }
- constexpr _Float128
- cos(_Float128 __x)
- { return __builtin_cosl(__x); }
- constexpr _Float128
- cosh(_Float128 __x)
- { return __builtin_coshl(__x); }
- constexpr _Float128
- exp(_Float128 __x)
- { return __builtin_expl(__x); }
- constexpr _Float128
- fabs(_Float128 __x)
- { return __builtin_fabsl(__x); }
- constexpr _Float128
- floor(_Float128 __x)
- { return __builtin_floorl(__x); }
- constexpr _Float128
- fmod(_Float128 __x, _Float128 __y)
- { return __builtin_fmodl(__x, __y); }
- inline _Float128
- frexp(_Float128 __x, int* __exp)
- { return __builtin_frexpl(__x, __exp); }
- constexpr _Float128
- ldexp(_Float128 __x, int __exp)
- { return __builtin_ldexpl(__x, __exp); }
- constexpr _Float128
- log(_Float128 __x)
- { return __builtin_logl(__x); }
- constexpr _Float128
- log10(_Float128 __x)
- { return __builtin_log10l(__x); }
- inline _Float128
- modf(_Float128 __x, _Float128* __iptr)
- {
- long double __i, __ret = __builtin_modfl(__x, &__i);
- *__iptr = __i;
- return __ret;
- }
- constexpr _Float128
- pow(_Float128 __x, _Float128 __y)
- { return __builtin_powl(__x, __y); }
- constexpr _Float128
- sin(_Float128 __x)
- { return __builtin_sinl(__x); }
- constexpr _Float128
- sinh(_Float128 __x)
- { return __builtin_sinhl(__x); }
- constexpr _Float128
- sqrt(_Float128 __x)
- { return __builtin_sqrtl(__x); }
- constexpr _Float128
- tan(_Float128 __x)
- { return __builtin_tanl(__x); }
- constexpr _Float128
- tanh(_Float128 __x)
- { return __builtin_tanhl(__x); }
- #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH)
- constexpr _Float128
- acos(_Float128 __x)
- { return __builtin_acosf128(__x); }
- constexpr _Float128
- asin(_Float128 __x)
- { return __builtin_asinf128(__x); }
- constexpr _Float128
- atan(_Float128 __x)
- { return __builtin_atanf128(__x); }
- constexpr _Float128
- atan2(_Float128 __y, _Float128 __x)
- { return __builtin_atan2f128(__y, __x); }
- constexpr _Float128
- ceil(_Float128 __x)
- { return __builtin_ceilf128(__x); }
- constexpr _Float128
- cos(_Float128 __x)
- { return __builtin_cosf128(__x); }
- constexpr _Float128
- cosh(_Float128 __x)
- { return __builtin_coshf128(__x); }
- constexpr _Float128
- exp(_Float128 __x)
- { return __builtin_expf128(__x); }
- constexpr _Float128
- fabs(_Float128 __x)
- { return __builtin_fabsf128(__x); }
- constexpr _Float128
- floor(_Float128 __x)
- { return __builtin_floorf128(__x); }
- constexpr _Float128
- fmod(_Float128 __x, _Float128 __y)
- { return __builtin_fmodf128(__x, __y); }
- inline _Float128
- frexp(_Float128 __x, int* __exp)
- { return __builtin_frexpf128(__x, __exp); }
- constexpr _Float128
- ldexp(_Float128 __x, int __exp)
- { return __builtin_ldexpf128(__x, __exp); }
- constexpr _Float128
- log(_Float128 __x)
- { return __builtin_logf128(__x); }
- constexpr _Float128
- log10(_Float128 __x)
- { return __builtin_log10f128(__x); }
- inline _Float128
- modf(_Float128 __x, _Float128* __iptr)
- { return __builtin_modff128(__x, __iptr); }
- constexpr _Float128
- pow(_Float128 __x, _Float128 __y)
- { return __builtin_powf128(__x, __y); }
- constexpr _Float128
- sin(_Float128 __x)
- { return __builtin_sinf128(__x); }
- constexpr _Float128
- sinh(_Float128 __x)
- { return __builtin_sinhf128(__x); }
- constexpr _Float128
- sqrt(_Float128 __x)
- { return __builtin_sqrtf128(__x); }
- constexpr _Float128
- tan(_Float128 __x)
- { return __builtin_tanf128(__x); }
- constexpr _Float128
- tanh(_Float128 __x)
- { return __builtin_tanhf128(__x); }
- #endif
- #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- constexpr __gnu_cxx::__bfloat16_t
- acos(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_acosf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- asin(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_asinf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- atan(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_atanf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- atan2(__gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_atan2f(__y, __x)); }
- constexpr __gnu_cxx::__bfloat16_t
- ceil(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_ceilf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- cos(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_cosf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- cosh(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_coshf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- exp(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_expf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- fabs(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_fabsf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- floor(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_floorf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- fmod(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_fmodf(__x, __y)); }
- inline __gnu_cxx::__bfloat16_t
- frexp(__gnu_cxx::__bfloat16_t __x, int* __exp)
- { return __gnu_cxx::__bfloat16_t(__builtin_frexpf(__x, __exp)); }
- constexpr __gnu_cxx::__bfloat16_t
- ldexp(__gnu_cxx::__bfloat16_t __x, int __exp)
- { return __gnu_cxx::__bfloat16_t(__builtin_ldexpf(__x, __exp)); }
- constexpr __gnu_cxx::__bfloat16_t
- log(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_logf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- log10(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_log10f(__x)); }
- inline __gnu_cxx::__bfloat16_t
- modf(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t* __iptr)
- {
- float __i, __ret = __builtin_modff(__x, &__i);
- *__iptr = __gnu_cxx::__bfloat16_t(__i);
- return __gnu_cxx::__bfloat16_t(__ret);
- }
- constexpr __gnu_cxx::__bfloat16_t
- pow(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_powf(__x, __y)); }
- constexpr __gnu_cxx::__bfloat16_t
- sin(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_sinf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- sinh(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_sinhf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- sqrt(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_sqrtf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- tan(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_tanf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- tanh(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_tanhf(__x)); }
- #endif
- template<typename _Tp, typename _Up>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- atan2(_Tp __y, _Up __x)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return atan2(__type(__y), __type(__x));
- }
- template<typename _Tp, typename _Up>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- fmod(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return fmod(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- inline _GLIBCXX_CONSTEXPR
- typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- pow(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return pow(__type(__x), __type(__y));
- }
- #if _GLIBCXX_USE_C99_MATH
- #if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
- // These are possible macros imported from C99-land.
- #undef fpclassify
- #undef isfinite
- #undef isinf
- #undef isnan
- #undef isnormal
- #undef signbit
- #undef isgreater
- #undef isgreaterequal
- #undef isless
- #undef islessequal
- #undef islessgreater
- #undef isunordered
- #if __cplusplus >= 201103L
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr int
- fpclassify(float __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr int
- fpclassify(double __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr int
- fpclassify(long double __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- int>::__type
- fpclassify(_Tp __x)
- { return __x != 0 ? FP_NORMAL : FP_ZERO; }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isfinite(float __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isfinite(double __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isfinite(long double __x)
- { return __builtin_isfinite(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
- isfinite(_Tp)
- { return true; }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isinf(float __x)
- { return __builtin_isinf(__x); }
- #if _GLIBCXX_HAVE_OBSOLETE_ISINF \
- && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC
- using ::isinf;
- #else
- constexpr bool
- isinf(double __x)
- { return __builtin_isinf(__x); }
- #endif
- constexpr bool
- isinf(long double __x)
- { return __builtin_isinf(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
- isinf(_Tp)
- { return false; }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isnan(float __x)
- { return __builtin_isnan(__x); }
- #if _GLIBCXX_HAVE_OBSOLETE_ISNAN \
- && !_GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC
- using ::isnan;
- #else
- constexpr bool
- isnan(double __x)
- { return __builtin_isnan(__x); }
- #endif
- constexpr bool
- isnan(long double __x)
- { return __builtin_isnan(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
- isnan(_Tp)
- { return false; }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isnormal(float __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- isnormal(double __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- isnormal(long double __x)
- { return __builtin_isnormal(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
- isnormal(_Tp __x)
- { return __x != 0 ? true : false; }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- // Note: middle-end/36757 is fixed, __builtin_signbit is type-generic.
- constexpr bool
- signbit(float __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- signbit(double __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- signbit(long double __x)
- { return __builtin_signbit(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- bool>::__type
- signbit(_Tp __x)
- { return __x < 0 ? true : false; }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isgreater(float __x, float __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreater(double __x, double __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreater(long double __x, long double __y)
- { return __builtin_isgreater(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename
- __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value), bool>::__type
- isgreater(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return __builtin_isgreater(__type(__x), __type(__y));
- }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isgreaterequal(float __x, float __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isgreaterequal(double __x, double __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isgreaterequal(long double __x, long double __y)
- { return __builtin_isgreaterequal(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename
- __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value), bool>::__type
- isgreaterequal(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return __builtin_isgreaterequal(__type(__x), __type(__y));
- }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isless(float __x, float __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- isless(double __x, double __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- isless(long double __x, long double __y)
- { return __builtin_isless(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename
- __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value), bool>::__type
- isless(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return __builtin_isless(__type(__x), __type(__y));
- }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- islessequal(float __x, float __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessequal(double __x, double __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessequal(long double __x, long double __y)
- { return __builtin_islessequal(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename
- __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value), bool>::__type
- islessequal(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return __builtin_islessequal(__type(__x), __type(__y));
- }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- islessgreater(float __x, float __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- islessgreater(double __x, double __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- islessgreater(long double __x, long double __y)
- { return __builtin_islessgreater(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename
- __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value), bool>::__type
- islessgreater(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return __builtin_islessgreater(__type(__x), __type(__y));
- }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr bool
- isunordered(float __x, float __y)
- { return __builtin_isunordered(__x, __y); }
- constexpr bool
- isunordered(double __x, double __y)
- { return __builtin_isunordered(__x, __y); }
- constexpr bool
- isunordered(long double __x, long double __y)
- { return __builtin_isunordered(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename
- __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
- && __is_arithmetic<_Up>::__value), bool>::__type
- isunordered(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return __builtin_isunordered(__type(__x), __type(__y));
- }
- #endif
- #else
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- fpclassify(_Tp __f)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __type(__f));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isfinite(_Tp __f)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isfinite(__type(__f));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isinf(_Tp __f)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isinf(__type(__f));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isnan(_Tp __f)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isnan(__type(__f));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isnormal(_Tp __f)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isnormal(__type(__f));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- signbit(_Tp __f)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_signbit(__type(__f));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isgreater(_Tp __f1, _Tp __f2)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isgreater(__type(__f1), __type(__f2));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isgreaterequal(_Tp __f1, _Tp __f2)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isgreaterequal(__type(__f1), __type(__f2));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isless(_Tp __f1, _Tp __f2)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isless(__type(__f1), __type(__f2));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- islessequal(_Tp __f1, _Tp __f2)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_islessequal(__type(__f1), __type(__f2));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- islessgreater(_Tp __f1, _Tp __f2)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_islessgreater(__type(__f1), __type(__f2));
- }
- template<typename _Tp>
- inline typename __gnu_cxx::__enable_if<__is_arithmetic<_Tp>::__value,
- int>::__type
- isunordered(_Tp __f1, _Tp __f2)
- {
- typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
- return __builtin_isunordered(__type(__f1), __type(__f2));
- }
- #endif // C++11
- #ifdef __STDCPP_FLOAT16_T__
- constexpr int
- fpclassify(_Float16 __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr bool
- isfinite(_Float16 __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isinf(_Float16 __x)
- { return __builtin_isinf(__x); }
- constexpr bool
- isnan(_Float16 __x)
- { return __builtin_isnan(__x); }
- constexpr bool
- isnormal(_Float16 __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- signbit(_Float16 __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- isgreater(_Float16 __x, _Float16 __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreaterequal(_Float16 __x, _Float16 __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isless(_Float16 __x, _Float16 __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- islessequal(_Float16 __x, _Float16 __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessgreater(_Float16 __x, _Float16 __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- isunordered(_Float16 __x, _Float16 __y)
- { return __builtin_isunordered(__x, __y); }
- #endif
- #ifdef __STDCPP_FLOAT32_T__
- constexpr int
- fpclassify(_Float32 __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr bool
- isfinite(_Float32 __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isinf(_Float32 __x)
- { return __builtin_isinf(__x); }
- constexpr bool
- isnan(_Float32 __x)
- { return __builtin_isnan(__x); }
- constexpr bool
- isnormal(_Float32 __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- signbit(_Float32 __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- isgreater(_Float32 __x, _Float32 __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreaterequal(_Float32 __x, _Float32 __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isless(_Float32 __x, _Float32 __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- islessequal(_Float32 __x, _Float32 __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessgreater(_Float32 __x, _Float32 __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- isunordered(_Float32 __x, _Float32 __y)
- { return __builtin_isunordered(__x, __y); }
- #endif
- #ifdef __STDCPP_FLOAT64_T__
- constexpr int
- fpclassify(_Float64 __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr bool
- isfinite(_Float64 __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isinf(_Float64 __x)
- { return __builtin_isinf(__x); }
- constexpr bool
- isnan(_Float64 __x)
- { return __builtin_isnan(__x); }
- constexpr bool
- isnormal(_Float64 __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- signbit(_Float64 __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- isgreater(_Float64 __x, _Float64 __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreaterequal(_Float64 __x, _Float64 __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isless(_Float64 __x, _Float64 __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- islessequal(_Float64 __x, _Float64 __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessgreater(_Float64 __x, _Float64 __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- isunordered(_Float64 __x, _Float64 __y)
- { return __builtin_isunordered(__x, __y); }
- #endif
- #ifdef __STDCPP_FLOAT128_T__
- constexpr int
- fpclassify(_Float128 __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr bool
- isfinite(_Float128 __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isinf(_Float128 __x)
- { return __builtin_isinf(__x); }
- constexpr bool
- isnan(_Float128 __x)
- { return __builtin_isnan(__x); }
- constexpr bool
- isnormal(_Float128 __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- signbit(_Float128 __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- isgreater(_Float128 __x, _Float128 __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreaterequal(_Float128 __x, _Float128 __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isless(_Float128 __x, _Float128 __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- islessequal(_Float128 __x, _Float128 __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessgreater(_Float128 __x, _Float128 __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- isunordered(_Float128 __x, _Float128 __y)
- { return __builtin_isunordered(__x, __y); }
- #endif
- #ifdef __STDCPP_BFLOAT16_T__
- constexpr int
- fpclassify(__gnu_cxx::__bfloat16_t __x)
- { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
- FP_SUBNORMAL, FP_ZERO, __x); }
- constexpr bool
- isfinite(__gnu_cxx::__bfloat16_t __x)
- { return __builtin_isfinite(__x); }
- constexpr bool
- isinf(__gnu_cxx::__bfloat16_t __x)
- { return __builtin_isinf(__x); }
- constexpr bool
- isnan(__gnu_cxx::__bfloat16_t __x)
- { return __builtin_isnan(__x); }
- constexpr bool
- isnormal(__gnu_cxx::__bfloat16_t __x)
- { return __builtin_isnormal(__x); }
- constexpr bool
- signbit(__gnu_cxx::__bfloat16_t __x)
- { return __builtin_signbit(__x); }
- constexpr bool
- isgreater(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __builtin_isgreater(__x, __y); }
- constexpr bool
- isgreaterequal(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __builtin_isgreaterequal(__x, __y); }
- constexpr bool
- isless(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __builtin_isless(__x, __y); }
- constexpr bool
- islessequal(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __builtin_islessequal(__x, __y); }
- constexpr bool
- islessgreater(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __builtin_islessgreater(__x, __y); }
- constexpr bool
- isunordered(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __builtin_isunordered(__x, __y); }
- #endif
- #endif /* _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC */
- #endif /* _GLIBCXX_USE_C99_MATH */
- #if __cplusplus >= 201103L
- #ifdef _GLIBCXX_USE_C99_MATH_TR1
- #undef acosh
- #undef acoshf
- #undef acoshl
- #undef asinh
- #undef asinhf
- #undef asinhl
- #undef atanh
- #undef atanhf
- #undef atanhl
- #undef cbrt
- #undef cbrtf
- #undef cbrtl
- #undef copysign
- #undef copysignf
- #undef copysignl
- #undef erf
- #undef erff
- #undef erfl
- #undef erfc
- #undef erfcf
- #undef erfcl
- #undef exp2
- #undef exp2f
- #undef exp2l
- #undef expm1
- #undef expm1f
- #undef expm1l
- #undef fdim
- #undef fdimf
- #undef fdiml
- #undef fma
- #undef fmaf
- #undef fmal
- #undef fmax
- #undef fmaxf
- #undef fmaxl
- #undef fmin
- #undef fminf
- #undef fminl
- #undef hypot
- #undef hypotf
- #undef hypotl
- #undef ilogb
- #undef ilogbf
- #undef ilogbl
- #undef lgamma
- #undef lgammaf
- #undef lgammal
- #ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS
- #undef llrint
- #undef llrintf
- #undef llrintl
- #undef llround
- #undef llroundf
- #undef llroundl
- #endif
- #undef log1p
- #undef log1pf
- #undef log1pl
- #undef log2
- #undef log2f
- #undef log2l
- #undef logb
- #undef logbf
- #undef logbl
- #undef lrint
- #undef lrintf
- #undef lrintl
- #undef lround
- #undef lroundf
- #undef lroundl
- #undef nan
- #undef nanf
- #undef nanl
- #undef nearbyint
- #undef nearbyintf
- #undef nearbyintl
- #undef nextafter
- #undef nextafterf
- #undef nextafterl
- #undef nexttoward
- #undef nexttowardf
- #undef nexttowardl
- #undef remainder
- #undef remainderf
- #undef remainderl
- #undef remquo
- #undef remquof
- #undef remquol
- #undef rint
- #undef rintf
- #undef rintl
- #undef round
- #undef roundf
- #undef roundl
- #undef scalbln
- #undef scalblnf
- #undef scalblnl
- #undef scalbn
- #undef scalbnf
- #undef scalbnl
- #undef tgamma
- #undef tgammaf
- #undef tgammal
- #undef trunc
- #undef truncf
- #undef truncl
- // types
- using ::double_t;
- using ::float_t;
- // functions
- using ::acosh;
- using ::acoshf;
- using ::acoshl;
- using ::asinh;
- using ::asinhf;
- using ::asinhl;
- using ::atanh;
- using ::atanhf;
- using ::atanhl;
- using ::cbrt;
- using ::cbrtf;
- using ::cbrtl;
- using ::copysign;
- using ::copysignf;
- using ::copysignl;
- using ::erf;
- using ::erff;
- using ::erfl;
- using ::erfc;
- using ::erfcf;
- using ::erfcl;
- using ::exp2;
- using ::exp2f;
- using ::exp2l;
- using ::expm1;
- using ::expm1f;
- using ::expm1l;
- using ::fdim;
- using ::fdimf;
- using ::fdiml;
- using ::fma;
- using ::fmaf;
- using ::fmal;
- using ::fmax;
- using ::fmaxf;
- using ::fmaxl;
- using ::fmin;
- using ::fminf;
- using ::fminl;
- using ::hypot;
- using ::hypotf;
- using ::hypotl;
- using ::ilogb;
- using ::ilogbf;
- using ::ilogbl;
- using ::lgamma;
- using ::lgammaf;
- using ::lgammal;
- #ifndef _GLIBCXX_NO_C99_ROUNDING_FUNCS
- using ::llrint;
- using ::llrintf;
- using ::llrintl;
- using ::llround;
- using ::llroundf;
- using ::llroundl;
- #endif
- using ::log1p;
- using ::log1pf;
- using ::log1pl;
- using ::log2;
- using ::log2f;
- using ::log2l;
- using ::logb;
- using ::logbf;
- using ::logbl;
- using ::lrint;
- using ::lrintf;
- using ::lrintl;
- using ::lround;
- using ::lroundf;
- using ::lroundl;
- using ::nan;
- using ::nanf;
- using ::nanl;
- using ::nearbyint;
- using ::nearbyintf;
- using ::nearbyintl;
- using ::nextafter;
- using ::nextafterf;
- using ::nextafterl;
- using ::nexttoward;
- using ::nexttowardf;
- using ::nexttowardl;
- using ::remainder;
- using ::remainderf;
- using ::remainderl;
- using ::remquo;
- using ::remquof;
- using ::remquol;
- using ::rint;
- using ::rintf;
- using ::rintl;
- using ::round;
- using ::roundf;
- using ::roundl;
- using ::scalbln;
- using ::scalblnf;
- using ::scalblnl;
- using ::scalbn;
- using ::scalbnf;
- using ::scalbnl;
- using ::tgamma;
- using ::tgammaf;
- using ::tgammal;
- using ::trunc;
- using ::truncf;
- using ::truncl;
- /// Additional overloads.
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- acosh(float __x)
- { return __builtin_acoshf(__x); }
- constexpr long double
- acosh(long double __x)
- { return __builtin_acoshl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- acosh(_Tp __x)
- { return __builtin_acosh(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- asinh(float __x)
- { return __builtin_asinhf(__x); }
- constexpr long double
- asinh(long double __x)
- { return __builtin_asinhl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- asinh(_Tp __x)
- { return __builtin_asinh(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- atanh(float __x)
- { return __builtin_atanhf(__x); }
- constexpr long double
- atanh(long double __x)
- { return __builtin_atanhl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- atanh(_Tp __x)
- { return __builtin_atanh(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- cbrt(float __x)
- { return __builtin_cbrtf(__x); }
- constexpr long double
- cbrt(long double __x)
- { return __builtin_cbrtl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- cbrt(_Tp __x)
- { return __builtin_cbrt(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- copysign(float __x, float __y)
- { return __builtin_copysignf(__x, __y); }
- constexpr long double
- copysign(long double __x, long double __y)
- { return __builtin_copysignl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- erf(float __x)
- { return __builtin_erff(__x); }
- constexpr long double
- erf(long double __x)
- { return __builtin_erfl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- erf(_Tp __x)
- { return __builtin_erf(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- erfc(float __x)
- { return __builtin_erfcf(__x); }
- constexpr long double
- erfc(long double __x)
- { return __builtin_erfcl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- erfc(_Tp __x)
- { return __builtin_erfc(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- exp2(float __x)
- { return __builtin_exp2f(__x); }
- constexpr long double
- exp2(long double __x)
- { return __builtin_exp2l(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- exp2(_Tp __x)
- { return __builtin_exp2(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- expm1(float __x)
- { return __builtin_expm1f(__x); }
- constexpr long double
- expm1(long double __x)
- { return __builtin_expm1l(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- expm1(_Tp __x)
- { return __builtin_expm1(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- fdim(float __x, float __y)
- { return __builtin_fdimf(__x, __y); }
- constexpr long double
- fdim(long double __x, long double __y)
- { return __builtin_fdiml(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- fma(float __x, float __y, float __z)
- { return __builtin_fmaf(__x, __y, __z); }
- constexpr long double
- fma(long double __x, long double __y, long double __z)
- { return __builtin_fmal(__x, __y, __z); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- fmax(float __x, float __y)
- { return __builtin_fmaxf(__x, __y); }
- constexpr long double
- fmax(long double __x, long double __y)
- { return __builtin_fmaxl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- fmin(float __x, float __y)
- { return __builtin_fminf(__x, __y); }
- constexpr long double
- fmin(long double __x, long double __y)
- { return __builtin_fminl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- hypot(float __x, float __y)
- { return __builtin_hypotf(__x, __y); }
- constexpr long double
- hypot(long double __x, long double __y)
- { return __builtin_hypotl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr int
- ilogb(float __x)
- { return __builtin_ilogbf(__x); }
- constexpr int
- ilogb(long double __x)
- { return __builtin_ilogbl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr
- typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- int>::__type
- ilogb(_Tp __x)
- { return __builtin_ilogb(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- lgamma(float __x)
- { return __builtin_lgammaf(__x); }
- constexpr long double
- lgamma(long double __x)
- { return __builtin_lgammal(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- lgamma(_Tp __x)
- { return __builtin_lgamma(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr long long
- llrint(float __x)
- { return __builtin_llrintf(__x); }
- constexpr long long
- llrint(long double __x)
- { return __builtin_llrintl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- long long>::__type
- llrint(_Tp __x)
- { return __builtin_llrint(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr long long
- llround(float __x)
- { return __builtin_llroundf(__x); }
- constexpr long long
- llround(long double __x)
- { return __builtin_llroundl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- long long>::__type
- llround(_Tp __x)
- { return __builtin_llround(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- log1p(float __x)
- { return __builtin_log1pf(__x); }
- constexpr long double
- log1p(long double __x)
- { return __builtin_log1pl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- log1p(_Tp __x)
- { return __builtin_log1p(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- // DR 568.
- constexpr float
- log2(float __x)
- { return __builtin_log2f(__x); }
- constexpr long double
- log2(long double __x)
- { return __builtin_log2l(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- log2(_Tp __x)
- { return __builtin_log2(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- logb(float __x)
- { return __builtin_logbf(__x); }
- constexpr long double
- logb(long double __x)
- { return __builtin_logbl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- logb(_Tp __x)
- { return __builtin_logb(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr long
- lrint(float __x)
- { return __builtin_lrintf(__x); }
- constexpr long
- lrint(long double __x)
- { return __builtin_lrintl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- long>::__type
- lrint(_Tp __x)
- { return __builtin_lrint(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr long
- lround(float __x)
- { return __builtin_lroundf(__x); }
- constexpr long
- lround(long double __x)
- { return __builtin_lroundl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- long>::__type
- lround(_Tp __x)
- { return __builtin_lround(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- nearbyint(float __x)
- { return __builtin_nearbyintf(__x); }
- constexpr long double
- nearbyint(long double __x)
- { return __builtin_nearbyintl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- nearbyint(_Tp __x)
- { return __builtin_nearbyint(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- nextafter(float __x, float __y)
- { return __builtin_nextafterf(__x, __y); }
- constexpr long double
- nextafter(long double __x, long double __y)
- { return __builtin_nextafterl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- nexttoward(float __x, long double __y)
- { return __builtin_nexttowardf(__x, __y); }
- constexpr long double
- nexttoward(long double __x, long double __y)
- { return __builtin_nexttowardl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- nexttoward(_Tp __x, long double __y)
- { return __builtin_nexttoward(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- remainder(float __x, float __y)
- { return __builtin_remainderf(__x, __y); }
- constexpr long double
- remainder(long double __x, long double __y)
- { return __builtin_remainderl(__x, __y); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- inline float
- remquo(float __x, float __y, int* __pquo)
- { return __builtin_remquof(__x, __y, __pquo); }
- inline long double
- remquo(long double __x, long double __y, int* __pquo)
- { return __builtin_remquol(__x, __y, __pquo); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- rint(float __x)
- { return __builtin_rintf(__x); }
- constexpr long double
- rint(long double __x)
- { return __builtin_rintl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- rint(_Tp __x)
- { return __builtin_rint(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- round(float __x)
- { return __builtin_roundf(__x); }
- constexpr long double
- round(long double __x)
- { return __builtin_roundl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- round(_Tp __x)
- { return __builtin_round(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- scalbln(float __x, long __ex)
- { return __builtin_scalblnf(__x, __ex); }
- constexpr long double
- scalbln(long double __x, long __ex)
- { return __builtin_scalblnl(__x, __ex); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- scalbln(_Tp __x, long __ex)
- { return __builtin_scalbln(__x, __ex); }
- #endif
-
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- scalbn(float __x, int __ex)
- { return __builtin_scalbnf(__x, __ex); }
- constexpr long double
- scalbn(long double __x, int __ex)
- { return __builtin_scalbnl(__x, __ex); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- scalbn(_Tp __x, int __ex)
- { return __builtin_scalbn(__x, __ex); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- tgamma(float __x)
- { return __builtin_tgammaf(__x); }
- constexpr long double
- tgamma(long double __x)
- { return __builtin_tgammal(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- tgamma(_Tp __x)
- { return __builtin_tgamma(__x); }
- #endif
-
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
- constexpr float
- trunc(float __x)
- { return __builtin_truncf(__x); }
- constexpr long double
- trunc(long double __x)
- { return __builtin_truncl(__x); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp>
- constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
- double>::__type
- trunc(_Tp __x)
- { return __builtin_trunc(__x); }
- #endif
- #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- constexpr _Float16
- acosh(_Float16 __x)
- { return _Float16(__builtin_acoshf(__x)); }
- constexpr _Float16
- asinh(_Float16 __x)
- { return _Float16(__builtin_asinhf(__x)); }
- constexpr _Float16
- atanh(_Float16 __x)
- { return _Float16(__builtin_atanhf(__x)); }
- constexpr _Float16
- cbrt(_Float16 __x)
- { return _Float16(__builtin_cbrtf(__x)); }
- constexpr _Float16
- copysign(_Float16 __x, _Float16 __y)
- { return __builtin_copysignf16(__x, __y); }
- constexpr _Float16
- erf(_Float16 __x)
- { return _Float16(__builtin_erff(__x)); }
- constexpr _Float16
- erfc(_Float16 __x)
- { return _Float16(__builtin_erfcf(__x)); }
- constexpr _Float16
- exp2(_Float16 __x)
- { return _Float16(__builtin_exp2f(__x)); }
- constexpr _Float16
- expm1(_Float16 __x)
- { return _Float16(__builtin_expm1f(__x)); }
- constexpr _Float16
- fdim(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_fdimf(__x, __y)); }
- constexpr _Float16
- fma(_Float16 __x, _Float16 __y, _Float16 __z)
- { return _Float16(__builtin_fmaf(__x, __y, __z)); }
- constexpr _Float16
- fmax(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_fmaxf(__x, __y)); }
- constexpr _Float16
- fmin(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_fminf(__x, __y)); }
- constexpr _Float16
- hypot(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_hypotf(__x, __y)); }
- constexpr int
- ilogb(_Float16 __x)
- { return _Float16(__builtin_ilogbf(__x)); }
- constexpr _Float16
- lgamma(_Float16 __x)
- { return _Float16(__builtin_lgammaf(__x)); }
- constexpr long long
- llrint(_Float16 __x)
- { return _Float16(__builtin_llrintf(__x)); }
- constexpr long long
- llround(_Float16 __x)
- { return _Float16(__builtin_llroundf(__x)); }
- constexpr _Float16
- log1p(_Float16 __x)
- { return _Float16(__builtin_log1pf(__x)); }
- // DR 568.
- constexpr _Float16
- log2(_Float16 __x)
- { return _Float16(__builtin_log2f(__x)); }
- constexpr _Float16
- logb(_Float16 __x)
- { return _Float16(__builtin_logbf(__x)); }
- constexpr long
- lrint(_Float16 __x)
- { return _Float16(__builtin_lrintf(__x)); }
- constexpr long
- lround(_Float16 __x)
- { return _Float16(__builtin_lroundf(__x)); }
- constexpr _Float16
- nearbyint(_Float16 __x)
- { return _Float16(__builtin_nearbyintf(__x)); }
- constexpr _Float16
- nextafter(_Float16 __x, _Float16 __y)
- {
- if (std::__is_constant_evaluated())
- return __builtin_nextafterf16(__x, __y);
- #ifdef __INT16_TYPE__
- using __float16_int_type = __INT16_TYPE__;
- #else
- using __float16_int_type = short int;
- #endif
- __float16_int_type __hx, __hy, __ix, __iy;
- __builtin_memcpy(&__hx, &__x, sizeof(__x));
- __builtin_memcpy(&__hy, &__y, sizeof(__x));
- __ix = __hx & 0x7fff; // |x|
- __iy = __hy & 0x7fff; // |y|
- if (__ix > 0x7c00 || __iy > 0x7c00) // x or y is NaN
- return __x + __y;
- if (__x == __y)
- return __y; // x == y, return y
- if (__ix == 0) // x == 0
- {
- __hy = (__hy & 0x8000) | 1; // return +-__FLT16_DENORM_MIN__
- __builtin_memcpy(&__x, &__hy, sizeof(__x));
- __builtin_nextafterf(0.0f, 1.0f); // raise underflow
- return __x;
- }
- if (__hx >= 0) // x > 0
- {
- if (__hx > __hy) // x > y, x -= ulp
- --__hx;
- else // x < y, x += ulp
- ++__hx;
- }
- else // x < 0
- {
- if (__hy >= 0 || __hx > __hy) // x < y, x -= ulp
- --__hx;
- else // x > y, x += ulp
- ++__hx;
- }
- __hy = __hx & 0x7c00;
- if (__hy >= 0x7c00)
- __builtin_nextafterf(__FLT_MAX__, __builtin_inff()); // overflow
- else if (__hy < 0x0400)
- __builtin_nextafterf(__FLT_MIN__, 0.0f); // underflow
- __builtin_memcpy(&__x, &__hx, sizeof(__x));
- return __x;
- }
- constexpr _Float16
- remainder(_Float16 __x, _Float16 __y)
- { return _Float16(__builtin_remainderf(__x, __y)); }
- inline _Float16
- remquo(_Float16 __x, _Float16 __y, int* __pquo)
- { return _Float16(__builtin_remquof(__x, __y, __pquo)); }
- constexpr _Float16
- rint(_Float16 __x)
- { return _Float16(__builtin_rintf(__x)); }
- constexpr _Float16
- round(_Float16 __x)
- { return _Float16(__builtin_roundf(__x)); }
- constexpr _Float16
- scalbln(_Float16 __x, long __ex)
- { return _Float16(__builtin_scalblnf(__x, __ex)); }
- constexpr _Float16
- scalbn(_Float16 __x, int __ex)
- { return _Float16(__builtin_scalbnf(__x, __ex)); }
- constexpr _Float16
- tgamma(_Float16 __x)
- { return _Float16(__builtin_tgammaf(__x)); }
- constexpr _Float16
- trunc(_Float16 __x)
- { return _Float16(__builtin_truncf(__x)); }
- #endif
- #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- constexpr _Float32
- acosh(_Float32 __x)
- { return __builtin_acoshf(__x); }
- constexpr _Float32
- asinh(_Float32 __x)
- { return __builtin_asinhf(__x); }
- constexpr _Float32
- atanh(_Float32 __x)
- { return __builtin_atanhf(__x); }
- constexpr _Float32
- cbrt(_Float32 __x)
- { return __builtin_cbrtf(__x); }
- constexpr _Float32
- copysign(_Float32 __x, _Float32 __y)
- { return __builtin_copysignf(__x, __y); }
- constexpr _Float32
- erf(_Float32 __x)
- { return __builtin_erff(__x); }
- constexpr _Float32
- erfc(_Float32 __x)
- { return __builtin_erfcf(__x); }
- constexpr _Float32
- exp2(_Float32 __x)
- { return __builtin_exp2f(__x); }
- constexpr _Float32
- expm1(_Float32 __x)
- { return __builtin_expm1f(__x); }
- constexpr _Float32
- fdim(_Float32 __x, _Float32 __y)
- { return __builtin_fdimf(__x, __y); }
- constexpr _Float32
- fma(_Float32 __x, _Float32 __y, _Float32 __z)
- { return __builtin_fmaf(__x, __y, __z); }
- constexpr _Float32
- fmax(_Float32 __x, _Float32 __y)
- { return __builtin_fmaxf(__x, __y); }
- constexpr _Float32
- fmin(_Float32 __x, _Float32 __y)
- { return __builtin_fminf(__x, __y); }
- constexpr _Float32
- hypot(_Float32 __x, _Float32 __y)
- { return __builtin_hypotf(__x, __y); }
- constexpr int
- ilogb(_Float32 __x)
- { return __builtin_ilogbf(__x); }
- constexpr _Float32
- lgamma(_Float32 __x)
- { return __builtin_lgammaf(__x); }
- constexpr long long
- llrint(_Float32 __x)
- { return __builtin_llrintf(__x); }
- constexpr long long
- llround(_Float32 __x)
- { return __builtin_llroundf(__x); }
- constexpr _Float32
- log1p(_Float32 __x)
- { return __builtin_log1pf(__x); }
- // DR 568.
- constexpr _Float32
- log2(_Float32 __x)
- { return __builtin_log2f(__x); }
- constexpr _Float32
- logb(_Float32 __x)
- { return __builtin_logbf(__x); }
- constexpr long
- lrint(_Float32 __x)
- { return __builtin_lrintf(__x); }
- constexpr long
- lround(_Float32 __x)
- { return __builtin_lroundf(__x); }
- constexpr _Float32
- nearbyint(_Float32 __x)
- { return __builtin_nearbyintf(__x); }
- constexpr _Float32
- nextafter(_Float32 __x, _Float32 __y)
- { return __builtin_nextafterf(__x, __y); }
- constexpr _Float32
- remainder(_Float32 __x, _Float32 __y)
- { return __builtin_remainderf(__x, __y); }
- inline _Float32
- remquo(_Float32 __x, _Float32 __y, int* __pquo)
- { return __builtin_remquof(__x, __y, __pquo); }
- constexpr _Float32
- rint(_Float32 __x)
- { return __builtin_rintf(__x); }
- constexpr _Float32
- round(_Float32 __x)
- { return __builtin_roundf(__x); }
- constexpr _Float32
- scalbln(_Float32 __x, long __ex)
- { return __builtin_scalblnf(__x, __ex); }
- constexpr _Float32
- scalbn(_Float32 __x, int __ex)
- { return __builtin_scalbnf(__x, __ex); }
- constexpr _Float32
- tgamma(_Float32 __x)
- { return __builtin_tgammaf(__x); }
- constexpr _Float32
- trunc(_Float32 __x)
- { return __builtin_truncf(__x); }
- #endif
- #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
- constexpr _Float64
- acosh(_Float64 __x)
- { return __builtin_acosh(__x); }
- constexpr _Float64
- asinh(_Float64 __x)
- { return __builtin_asinh(__x); }
- constexpr _Float64
- atanh(_Float64 __x)
- { return __builtin_atanh(__x); }
- constexpr _Float64
- cbrt(_Float64 __x)
- { return __builtin_cbrt(__x); }
- constexpr _Float64
- copysign(_Float64 __x, _Float64 __y)
- { return __builtin_copysign(__x, __y); }
- constexpr _Float64
- erf(_Float64 __x)
- { return __builtin_erf(__x); }
- constexpr _Float64
- erfc(_Float64 __x)
- { return __builtin_erfc(__x); }
- constexpr _Float64
- exp2(_Float64 __x)
- { return __builtin_exp2(__x); }
- constexpr _Float64
- expm1(_Float64 __x)
- { return __builtin_expm1(__x); }
- constexpr _Float64
- fdim(_Float64 __x, _Float64 __y)
- { return __builtin_fdim(__x, __y); }
- constexpr _Float64
- fma(_Float64 __x, _Float64 __y, _Float64 __z)
- { return __builtin_fma(__x, __y, __z); }
- constexpr _Float64
- fmax(_Float64 __x, _Float64 __y)
- { return __builtin_fmax(__x, __y); }
- constexpr _Float64
- fmin(_Float64 __x, _Float64 __y)
- { return __builtin_fmin(__x, __y); }
- constexpr _Float64
- hypot(_Float64 __x, _Float64 __y)
- { return __builtin_hypot(__x, __y); }
- constexpr int
- ilogb(_Float64 __x)
- { return __builtin_ilogb(__x); }
- constexpr _Float64
- lgamma(_Float64 __x)
- { return __builtin_lgamma(__x); }
- constexpr long long
- llrint(_Float64 __x)
- { return __builtin_llrint(__x); }
- constexpr long long
- llround(_Float64 __x)
- { return __builtin_llround(__x); }
- constexpr _Float64
- log1p(_Float64 __x)
- { return __builtin_log1p(__x); }
- // DR 568.
- constexpr _Float64
- log2(_Float64 __x)
- { return __builtin_log2(__x); }
- constexpr _Float64
- logb(_Float64 __x)
- { return __builtin_logb(__x); }
- constexpr long
- lrint(_Float64 __x)
- { return __builtin_lrint(__x); }
- constexpr long
- lround(_Float64 __x)
- { return __builtin_lround(__x); }
- constexpr _Float64
- nearbyint(_Float64 __x)
- { return __builtin_nearbyint(__x); }
- constexpr _Float64
- nextafter(_Float64 __x, _Float64 __y)
- { return __builtin_nextafter(__x, __y); }
- constexpr _Float64
- remainder(_Float64 __x, _Float64 __y)
- { return __builtin_remainder(__x, __y); }
- inline _Float64
- remquo(_Float64 __x, _Float64 __y, int* __pquo)
- { return __builtin_remquo(__x, __y, __pquo); }
- constexpr _Float64
- rint(_Float64 __x)
- { return __builtin_rint(__x); }
- constexpr _Float64
- round(_Float64 __x)
- { return __builtin_round(__x); }
- constexpr _Float64
- scalbln(_Float64 __x, long __ex)
- { return __builtin_scalbln(__x, __ex); }
- constexpr _Float64
- scalbn(_Float64 __x, int __ex)
- { return __builtin_scalbn(__x, __ex); }
- constexpr _Float64
- tgamma(_Float64 __x)
- { return __builtin_tgamma(__x); }
- constexpr _Float64
- trunc(_Float64 __x)
- { return __builtin_trunc(__x); }
- #endif
- #if defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128)
- constexpr _Float128
- acosh(_Float128 __x)
- { return __builtin_acoshl(__x); }
- constexpr _Float128
- asinh(_Float128 __x)
- { return __builtin_asinhl(__x); }
- constexpr _Float128
- atanh(_Float128 __x)
- { return __builtin_atanhl(__x); }
- constexpr _Float128
- cbrt(_Float128 __x)
- { return __builtin_cbrtl(__x); }
- constexpr _Float128
- copysign(_Float128 __x, _Float128 __y)
- { return __builtin_copysignl(__x, __y); }
- constexpr _Float128
- erf(_Float128 __x)
- { return __builtin_erfl(__x); }
- constexpr _Float128
- erfc(_Float128 __x)
- { return __builtin_erfcl(__x); }
- constexpr _Float128
- exp2(_Float128 __x)
- { return __builtin_exp2l(__x); }
- constexpr _Float128
- expm1(_Float128 __x)
- { return __builtin_expm1l(__x); }
- constexpr _Float128
- fdim(_Float128 __x, _Float128 __y)
- { return __builtin_fdiml(__x, __y); }
- constexpr _Float128
- fma(_Float128 __x, _Float128 __y, _Float128 __z)
- { return __builtin_fmal(__x, __y, __z); }
- constexpr _Float128
- fmax(_Float128 __x, _Float128 __y)
- { return __builtin_fmaxl(__x, __y); }
- constexpr _Float128
- fmin(_Float128 __x, _Float128 __y)
- { return __builtin_fminl(__x, __y); }
- constexpr _Float128
- hypot(_Float128 __x, _Float128 __y)
- { return __builtin_hypotl(__x, __y); }
- constexpr int
- ilogb(_Float128 __x)
- { return __builtin_ilogbl(__x); }
- constexpr _Float128
- lgamma(_Float128 __x)
- { return __builtin_lgammal(__x); }
- constexpr long long
- llrint(_Float128 __x)
- { return __builtin_llrintl(__x); }
- constexpr long long
- llround(_Float128 __x)
- { return __builtin_llroundl(__x); }
- constexpr _Float128
- log1p(_Float128 __x)
- { return __builtin_log1pl(__x); }
- // DR 568.
- constexpr _Float128
- log2(_Float128 __x)
- { return __builtin_log2l(__x); }
- constexpr _Float128
- logb(_Float128 __x)
- { return __builtin_logbl(__x); }
- constexpr long
- lrint(_Float128 __x)
- { return __builtin_lrintl(__x); }
- constexpr long
- lround(_Float128 __x)
- { return __builtin_lroundl(__x); }
- constexpr _Float128
- nearbyint(_Float128 __x)
- { return __builtin_nearbyintl(__x); }
- constexpr _Float128
- nextafter(_Float128 __x, _Float128 __y)
- { return __builtin_nextafterl(__x, __y); }
- constexpr _Float128
- remainder(_Float128 __x, _Float128 __y)
- { return __builtin_remainderl(__x, __y); }
- inline _Float128
- remquo(_Float128 __x, _Float128 __y, int* __pquo)
- { return __builtin_remquol(__x, __y, __pquo); }
- constexpr _Float128
- rint(_Float128 __x)
- { return __builtin_rintl(__x); }
- constexpr _Float128
- round(_Float128 __x)
- { return __builtin_roundl(__x); }
- constexpr _Float128
- scalbln(_Float128 __x, long __ex)
- { return __builtin_scalblnl(__x, __ex); }
- constexpr _Float128
- scalbn(_Float128 __x, int __ex)
- { return __builtin_scalbnl(__x, __ex); }
- constexpr _Float128
- tgamma(_Float128 __x)
- { return __builtin_tgammal(__x); }
- constexpr _Float128
- trunc(_Float128 __x)
- { return __builtin_truncl(__x); }
- #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH)
- constexpr _Float128
- acosh(_Float128 __x)
- { return __builtin_acoshf128(__x); }
- constexpr _Float128
- asinh(_Float128 __x)
- { return __builtin_asinhf128(__x); }
- constexpr _Float128
- atanh(_Float128 __x)
- { return __builtin_atanhf128(__x); }
- constexpr _Float128
- cbrt(_Float128 __x)
- { return __builtin_cbrtf128(__x); }
- constexpr _Float128
- copysign(_Float128 __x, _Float128 __y)
- { return __builtin_copysignf128(__x, __y); }
- constexpr _Float128
- erf(_Float128 __x)
- { return __builtin_erff128(__x); }
- constexpr _Float128
- erfc(_Float128 __x)
- { return __builtin_erfcf128(__x); }
- constexpr _Float128
- exp2(_Float128 __x)
- { return __builtin_exp2f128(__x); }
- constexpr _Float128
- expm1(_Float128 __x)
- { return __builtin_expm1f128(__x); }
- constexpr _Float128
- fdim(_Float128 __x, _Float128 __y)
- { return __builtin_fdimf128(__x, __y); }
- constexpr _Float128
- fma(_Float128 __x, _Float128 __y, _Float128 __z)
- { return __builtin_fmaf128(__x, __y, __z); }
- constexpr _Float128
- fmax(_Float128 __x, _Float128 __y)
- { return __builtin_fmaxf128(__x, __y); }
- constexpr _Float128
- fmin(_Float128 __x, _Float128 __y)
- { return __builtin_fminf128(__x, __y); }
- constexpr _Float128
- hypot(_Float128 __x, _Float128 __y)
- { return __builtin_hypotf128(__x, __y); }
- constexpr int
- ilogb(_Float128 __x)
- { return __builtin_ilogbf128(__x); }
- constexpr _Float128
- lgamma(_Float128 __x)
- { return __builtin_lgammaf128(__x); }
- constexpr long long
- llrint(_Float128 __x)
- { return __builtin_llrintf128(__x); }
- constexpr long long
- llround(_Float128 __x)
- { return __builtin_llroundf128(__x); }
- constexpr _Float128
- log1p(_Float128 __x)
- { return __builtin_log1pf128(__x); }
- // DR 568.
- constexpr _Float128
- log2(_Float128 __x)
- { return __builtin_log2f128(__x); }
- constexpr _Float128
- logb(_Float128 __x)
- { return __builtin_logbf128(__x); }
- constexpr long
- lrint(_Float128 __x)
- { return __builtin_lrintf128(__x); }
- constexpr long
- lround(_Float128 __x)
- { return __builtin_lroundf128(__x); }
- constexpr _Float128
- nearbyint(_Float128 __x)
- { return __builtin_nearbyintf128(__x); }
- constexpr _Float128
- nextafter(_Float128 __x, _Float128 __y)
- { return __builtin_nextafterf128(__x, __y); }
- constexpr _Float128
- remainder(_Float128 __x, _Float128 __y)
- { return __builtin_remainderf128(__x, __y); }
- inline _Float128
- remquo(_Float128 __x, _Float128 __y, int* __pquo)
- { return __builtin_remquof128(__x, __y, __pquo); }
- constexpr _Float128
- rint(_Float128 __x)
- { return __builtin_rintf128(__x); }
- constexpr _Float128
- round(_Float128 __x)
- { return __builtin_roundf128(__x); }
- constexpr _Float128
- scalbln(_Float128 __x, long __ex)
- { return __builtin_scalblnf128(__x, __ex); }
- constexpr _Float128
- scalbn(_Float128 __x, int __ex)
- { return __builtin_scalbnf128(__x, __ex); }
- constexpr _Float128
- tgamma(_Float128 __x)
- { return __builtin_tgammaf128(__x); }
- constexpr _Float128
- trunc(_Float128 __x)
- { return __builtin_truncf128(__x); }
- #endif
- #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- constexpr __gnu_cxx::__bfloat16_t
- acosh(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_acoshf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- asinh(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_asinhf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- atanh(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_atanhf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- cbrt(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_cbrtf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- copysign(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_copysignf(__x, __y)); }
- constexpr __gnu_cxx::__bfloat16_t
- erf(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_erff(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- erfc(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_erfcf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- exp2(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_exp2f(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- expm1(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_expm1f(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- fdim(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_fdimf(__x, __y)); }
- constexpr __gnu_cxx::__bfloat16_t
- fma(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __z)
- { return __gnu_cxx::__bfloat16_t(__builtin_fmaf(__x, __y, __z)); }
- constexpr __gnu_cxx::__bfloat16_t
- fmax(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_fmaxf(__x, __y)); }
- constexpr __gnu_cxx::__bfloat16_t
- fmin(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_fminf(__x, __y)); }
- constexpr __gnu_cxx::__bfloat16_t
- hypot(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_hypotf(__x, __y)); }
- constexpr int
- ilogb(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_ilogbf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- lgamma(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_lgammaf(__x)); }
- constexpr long long
- llrint(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_llrintf(__x)); }
- constexpr long long
- llround(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_llroundf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- log1p(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_log1pf(__x)); }
- // DR 568.
- constexpr __gnu_cxx::__bfloat16_t
- log2(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_log2f(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- logb(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_logbf(__x)); }
- constexpr long
- lrint(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_lrintf(__x)); }
- constexpr long
- lround(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_lroundf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- nearbyint(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_nearbyintf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- nextafter(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- {
- if (std::__is_constant_evaluated())
- return __builtin_nextafterf16b(__x, __y);
- #ifdef __INT16_TYPE__
- using __bfloat16_int_type = __INT16_TYPE__;
- #else
- using __bfloat16_int_type = short int;
- #endif
- __bfloat16_int_type __hx, __hy, __ix, __iy;
- __builtin_memcpy(&__hx, &__x, sizeof(__x));
- __builtin_memcpy(&__hy, &__y, sizeof(__x));
- __ix = __hx & 0x7fff; // |x|
- __iy = __hy & 0x7fff; // |y|
- if (__ix > 0x7f80 || __iy > 0x7f80) // x or y is NaN
- return __x + __y;
- if (__x == __y)
- return __y; // x == y, return y
- if (__ix == 0) // x == 0
- {
- __hy = (__hy & 0x8000) | 1; // return +-__BFLT16_DENORM_MIN__
- __builtin_memcpy(&__x, &__hy, sizeof(__x));
- __builtin_nextafterf(0.0f, 1.0f); // raise underflow
- return __x;
- }
- if (__hx >= 0) // x > 0
- {
- if (__hx > __hy) // x > y, x -= ulp
- --__hx;
- else // x < y, x += ulp
- ++__hx;
- }
- else // x < 0
- {
- if (__hy >= 0 || __hx > __hy) // x < y, x -= ulp
- --__hx;
- else // x > y, x += ulp
- ++__hx;
- }
- __hy = __hx & 0x7f80;
- if (__hy >= 0x7f80)
- __builtin_nextafterf(__FLT_MAX__, __builtin_inff()); // overflow
- else if (__hy < 0x0080)
- __builtin_nextafterf(__FLT_MIN__, 0.0f); // underflow
- __builtin_memcpy(&__x, &__hx, sizeof(__x));
- return __x;
- }
- constexpr __gnu_cxx::__bfloat16_t
- remainder(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y)
- { return __gnu_cxx::__bfloat16_t(__builtin_remainderf(__x, __y)); }
- inline __gnu_cxx::__bfloat16_t
- remquo(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, int* __pquo)
- { return __gnu_cxx::__bfloat16_t(__builtin_remquof(__x, __y, __pquo)); }
- constexpr __gnu_cxx::__bfloat16_t
- rint(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_rintf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- round(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_roundf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- scalbln(__gnu_cxx::__bfloat16_t __x, long __ex)
- { return __gnu_cxx::__bfloat16_t(__builtin_scalblnf(__x, __ex)); }
- constexpr __gnu_cxx::__bfloat16_t
- scalbn(__gnu_cxx::__bfloat16_t __x, int __ex)
- { return __gnu_cxx::__bfloat16_t(__builtin_scalbnf(__x, __ex)); }
- constexpr __gnu_cxx::__bfloat16_t
- tgamma(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_tgammaf(__x)); }
- constexpr __gnu_cxx::__bfloat16_t
- trunc(__gnu_cxx::__bfloat16_t __x)
- { return __gnu_cxx::__bfloat16_t(__builtin_truncf(__x)); }
- #endif
- #ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO_INT
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- copysign(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return copysign(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- fdim(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return fdim(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- fmax(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return fmax(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- fmin(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return fmin(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- hypot(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return hypot(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- nextafter(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return nextafter(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- remainder(_Tp __x, _Up __y)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return remainder(__type(__x), __type(__y));
- }
- template<typename _Tp, typename _Up>
- inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
- remquo(_Tp __x, _Up __y, int* __pquo)
- {
- typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
- return remquo(__type(__x), __type(__y), __pquo);
- }
- template<typename _Tp, typename _Up, typename _Vp>
- constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
- fma(_Tp __x, _Up __y, _Vp __z)
- {
- typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
- return fma(__type(__x), __type(__y), __type(__z));
- }
- #endif
- #endif // _GLIBCXX_USE_C99_MATH_TR1
- #endif // C++11
- #if __cplusplus >= 201703L
- // [c.math.hypot3], three-dimensional hypotenuse
- #define __cpp_lib_hypot 201603L
- template<typename _Tp>
- inline _Tp
- __hypot3(_Tp __x, _Tp __y, _Tp __z)
- {
- __x = std::abs(__x);
- __y = std::abs(__y);
- __z = std::abs(__z);
- if (_Tp __a = __x < __y ? __y < __z ? __z : __y : __x < __z ? __z : __x)
- return __a * std::sqrt((__x / __a) * (__x / __a)
- + (__y / __a) * (__y / __a)
- + (__z / __a) * (__z / __a));
- else
- return {};
- }
- inline float
- hypot(float __x, float __y, float __z)
- { return std::__hypot3<float>(__x, __y, __z); }
- inline double
- hypot(double __x, double __y, double __z)
- { return std::__hypot3<double>(__x, __y, __z); }
- inline long double
- hypot(long double __x, long double __y, long double __z)
- { return std::__hypot3<long double>(__x, __y, __z); }
- template<typename _Tp, typename _Up, typename _Vp>
- __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
- hypot(_Tp __x, _Up __y, _Vp __z)
- {
- using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
- return std::__hypot3<__type>(__x, __y, __z);
- }
- #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- inline _Float16
- hypot(_Float16 __x, _Float16 __y, _Float16 __z)
- { return std::__hypot3<_Float16>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- inline _Float32
- hypot(_Float32 __x, _Float32 __y, _Float32 __z)
- { return std::__hypot3<_Float32>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
- inline _Float64
- hypot(_Float64 __x, _Float64 __y, _Float64 __z)
- { return std::__hypot3<_Float64>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_FLOAT128_T__) \
- && (defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) \
- || defined(_GLIBCXX_HAVE_FLOAT128_MATH))
- inline _Float128
- hypot(_Float128 __x, _Float128 __y, _Float128 __z)
- { return std::__hypot3<_Float128>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- inline __gnu_cxx::__bfloat16_t
- hypot(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __z)
- { return std::__hypot3<__gnu_cxx::__bfloat16_t>(__x, __y, __z); }
- #endif
- #endif // C++17
- #if __cplusplus >= 202002L
- // linear interpolation
- # define __cpp_lib_interpolate 201902L
- template<typename _Fp>
- constexpr _Fp
- __lerp(_Fp __a, _Fp __b, _Fp __t) noexcept
- {
- if ((__a <= 0 && __b >= 0) || (__a >= 0 && __b <= 0))
- return __t * __b + (1 - __t) * __a;
- if (__t == 1)
- return __b; // exact
- // Exact at __t=0, monotonic except near __t=1,
- // bounded, determinate, and consistent:
- const _Fp __x = __a + __t * (__b - __a);
- return (__t > 1) == (__b > __a)
- ? (__b < __x ? __x : __b)
- : (__b > __x ? __x : __b); // monotonic near __t=1
- }
- constexpr float
- lerp(float __a, float __b, float __t) noexcept
- { return std::__lerp(__a, __b, __t); }
- constexpr double
- lerp(double __a, double __b, double __t) noexcept
- { return std::__lerp(__a, __b, __t); }
- constexpr long double
- lerp(long double __a, long double __b, long double __t) noexcept
- { return std::__lerp(__a, __b, __t); }
- template<typename _Tp, typename _Up, typename _Vp>
- constexpr __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>
- lerp(_Tp __x, _Up __y, _Vp __z) noexcept
- {
- using __type = __gnu_cxx::__promoted_t<_Tp, _Up, _Vp>;
- return std::__lerp<__type>(__x, __y, __z);
- }
- #if defined(__STDCPP_FLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- inline _Float16
- lerp(_Float16 __x, _Float16 __y, _Float16 __z) noexcept
- { return std::__lerp<_Float16>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_FLOAT32_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- inline _Float32
- lerp(_Float32 __x, _Float32 __y, _Float32 __z) noexcept
- { return std::__lerp<_Float32>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_FLOAT64_T__) && defined(_GLIBCXX_DOUBLE_IS_IEEE_BINARY64)
- inline _Float64
- lerp(_Float64 __x, _Float64 __y, _Float64 __z) noexcept
- { return std::__lerp<_Float64>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_FLOAT128_T__) \
- && (defined(_GLIBCXX_LDOUBLE_IS_IEEE_BINARY128) \
- || defined(_GLIBCXX_HAVE_FLOAT128_MATH))
- inline _Float128
- lerp(_Float128 __x, _Float128 __y, _Float128 __z) noexcept
- { return std::__lerp<_Float128>(__x, __y, __z); }
- #endif
- #if defined(__STDCPP_BFLOAT16_T__) && defined(_GLIBCXX_FLOAT_IS_IEEE_BINARY32)
- inline __gnu_cxx::__bfloat16_t
- lerp(__gnu_cxx::__bfloat16_t __x, __gnu_cxx::__bfloat16_t __y, __gnu_cxx::__bfloat16_t __z) noexcept
- { return std::__lerp<__gnu_cxx::__bfloat16_t>(__x, __y, __z); }
- #endif
- #endif // C++20
- _GLIBCXX_END_NAMESPACE_VERSION
- } // namespace
- #if _GLIBCXX_USE_STD_SPEC_FUNCS
- # include <bits/specfun.h>
- #endif
- } // extern "C++"
- #endif
|