<cmath>ãããã§ã¯ãäžè¬çãªæ°åŠé¢æ°ããã³åçš®ãã¯ããæäŸããã
- æšæºCã©ã€ãã©ãªãšã®å·®ç°
- ãšã©ãŒã®æ±ã
- ãšã©ãŒã®çš®é¡
- äžè§é¢æ°
- åæ²ç·é¢æ°
- ææ°é¢æ°ãšå¯Ÿæ°é¢æ°
- ä»®æ°ãšææ°
- 环ä¹ã»åªæ ¹ãšçµ¶å¯Ÿå€
- èª€å·®é¢æ°ãšã¬ã³ã颿°
- ãã®ä»ç¹æ®é¢æ°
- æè¿åæŽæ°
- å°äœ
- æµ®åå°æ°ç¹æäœ
- æå€§å€ã»æå°å€ãšæ£ã®å·®
- ä¹ç®ã»å ç®
- ç·åœ¢è£é
- æ°å€åé¡
- NaNã®æ±ã
- æ°å€æ¯èŒ
- å
- æ°å€ã®ãã¯ã
- æ°å€åé¡ã®ãã¯ã
- ãã®ä»ã®ãã¯ã
ããªãŒã¹ã¿ã³ãã£ã³ã°
ãã®ãããã®äžéšã®æ©èœããããªãŒã¹ã¿ã³ãã£ã³ã°åŠçç³»ã§ã䜿çšã§ãããã©ã®æ©èœã䜿çšã§ãããã¯åæ©èœã®ããŒãžãåç §ã
æšæºCã©ã€ãã©ãªãšã®å·®ç°
<cmath>ã¯åºæ¬çã«ã¯ãæšæº C ã©ã€ãã©ãªã® <math.h> ã«æºæ ããŠããããããã€ãã®å€æŽç¹ãããã
C++98ã®C90ãšã®å·®ç°
- å颿°ã¯ std åå空éã«å®çŸ©ãããŠããã
fabsãšç䟡ã®é¢æ°absã远å ããŠãããpowã®ç¬¬ 2 åŒæ°ãintã®ãªãŒããŒããŒãã远å ããŠããã- å颿°ïŒäžèš 2 颿°ãå«ãïŒã«å¯ŸããŠãåŒæ°ããã³æ»ãå€ã®
doubleã«å¯Ÿå¿ããç®æãfloatããã³long doubleã«ãªã£ãŠãããªãŒããŒããŒãããŒãžã§ã³ã远å ããŠããã
C++11ã®C99ãšã®å·®ç°
- å颿°ã¯ std åå空éã«å®çŸ©ãããŠããã
fabsãšç䟡ã®é¢æ°absã远å ããŠããã- åŒæ°ã«
doubleãå«ãå颿°ïŒäžèšabsãå«ãïŒã«å¯ŸããŠãåŒæ°ããã³æ»ãå€ã®doubleã«å¯Ÿå¿ããç®æãfloatãšlong doubleã®ãªãŒããŒããŒãããŒãžã§ã³ã远å ããŠããã
ãªããC99 ã«ãåæ§ã®é¢æ°ïŒæ¥å°ŸèŸãfããã³lã®ãã®ïŒãååšãããããããã«ã€ããŠã¯èŠæ Œæžã§ã¯èšåãããŠããªãã
ãã ããnanã«ã€ããŠã¯ãåŒæ°ã®åã§ã¯åºå¥ãã€ããªããããC99 ã®nanfããã³nanlããã®ãŸãŸäœ¿çšããã - æ°å€åé¡ãããã³ãæ°å€æ¯èŒã®åãã¯ãã®æ¿ããã«ãåŒæ°ãåæµ®åå°æ°ç¹åã§ãæ»ãå€ã
boolã®é¢æ°ã远å ããŠããã -
äžèšã«å ããŠã以äžã®ãããªãªãŒããŒããŒã解決ãã§ããããã«ãæŽã«ãªãŒããŒããŒãã远å ããŠããã
doubleåã®ä»®åŒæ°ã«å¯Ÿå¿ããå®åŒæ°ã®ãããããlong doubleã§ããå Žåãdoubleåã®ä»®åŒæ°ã«å¯Ÿå¿ããå šãŠã®å®åŒæ°ãlong doubleã«ãã£ã¹ãããŠãããªãŒããŒããŒã解決ãè¡ãã- äžèšä»¥å€ã§ã
doubleåã®ä»®åŒæ°ã«å¯Ÿå¿ããå®åŒæ°ã®ãããããdoubleåãŸãã¯æŽæ°åã§ããå Žåãdoubleåã®ä»®åŒæ°ã«å¯Ÿå¿ããå šãŠã®å®åŒæ°ãdoubleã«ãã£ã¹ãããŠãããªãŒããŒããŒã解決ãè¡ãã - äžèšä»¥å€ã®å Žåã
doubleåã®ä»®åŒæ°ã«å¯Ÿå¿ããå šãŠã®å®åŒæ°ãfloatã«ãã£ã¹ãããŠãããªãŒããŒããŒã解決ãè¡ãã
ãããã®èŠåã¯ãC99 ã§å°å ¥ããã
<tgmath.h>ã® type-generic ãã¯ããšã»ãŒç䟡ã§ãããã以äžã®ç¹ãç°ãªãã- C99 ã§ã¯
modf㯠type-generic ãã¯ãã®å¯Ÿè±¡ã§ã¯ãªãããC++11 ã§ã¯ãªãŒããŒããŒã解決ã®å¯Ÿè±¡ã§ããã - C99 ã§ã¯åæåãæŽæ°åãšã¿ãªãããããC++11 ã§ã¯åæåã¯ïŒã¹ã³ãŒãä»ãã»ã¹ã³ãŒãç¡ãå ±ã«ïŒæŽæ°åãšã¯ã¿ãªãããªãã
- C++ ã®ã¯ã©ã¹åã¯å€ææŒç®åãæã€ããšãã§ãããããå®åŒæ°ã®åã倿æŒç®åãæã€ã¯ã©ã¹åã®å Žåãäžèšã«åŸã£ãŠãªãŒããŒããŒã解決ãè¡ãããã
ããããäžèšã®ãªãŒããŒããŒã解決ã®èŠåã«å³å¯ã«åŸããšãåæåã倿æŒç®åãæã€ã¯ã©ã¹åã®åŒæ°ã
floatãšçäŸ¡ã®æ±ãã«ãªã£ãŠããŸãã
ãã®ãããäžèšã«èšèŒã®ããç¡æ¡ä»¶ã®ããã£ã¹ããã¯ãC++14 ã§ã¯ãã®å¯Ÿè±¡ããç®è¡åãã®ã¿ã«éãããããšã«ãªããåæåã倿æŒç®åãæã€ã¯ã©ã¹åã¯äžèšã®ããã£ã¹ããã®å¯Ÿè±¡ãšã¯ãªããªããªã£ãã
ïŒãã¡ããããªãŒããŒããŒã解決ã®åŸã®æé»ã®å€æã¯äŸç¶ãšããŠæå¹ã§ãããããã¹ã³ãŒãç¡ãåæåãexplicitã§ãªã倿æŒç®åãæã€ã¯ã©ã¹åã¯ãæç€ºçãªãã£ã¹ãç¡ãã§å®åŒæ°ã«ãªãåŸããïŒ
ãªããC++11 ã®èšèŒã«ããç¡æ¡ä»¶ã®ãã£ã¹ãã¯èŠæ Œã®ãã°ãšããããããC++11 ã§ãã£ãŠãã¹ã³ãŒãä»ãåæåã explicit ãªå€ææŒç®åã®ããã¯ã©ã¹åã«ãäžèšèŠåã«ããç¡æ¡ä»¶ã®ãã£ã¹ããé©çšããããšæ³å®ãã¹ãã§ã¯ãªãã
ïŒLWG 2086. Overly generic type support for math functions åç §ïŒå颿°ã®åå¥ããŒãžã§ã¯ãäžèšã®ãªãŒããŒããŒã颿°ãã³ãŒãã§ç€ºãéã«ã¯ãåŒæ°ãæ»ãå€ã®åãæäœã§ç€ºãã
Integral // ä»»æã®æŽæ°å Arithmetic // ä»»æã®ç®è¡å Promoted // 決å®ãããæ»ãå€åè€æ°ã®åŒæ°ãããå Žåã«ã¯ãæ°åã®ãµãã£ãã¯ã¹ã§åºå¥ããã äŸã以äžã«ç€ºãã
double atan(Integral x); Promoted atan2(Arithmetic1 y, Arithmetic2 x);
C++23ã§ã®å·®ç°
constexpr察å¿
C++23ã§ã¯ãå€ãã®æ°åŠé¢æ°ãconstexprã«å¯Ÿå¿ãã宿°åŒå
ã§äœ¿çšã§ããããã«ãªã£ããC++23æç¹ã§ã¯ãã³ã³ãã€ã©ãã³ãã®è² æ
ãå°ãªãæ©èœãconstexpr察å¿ããã
C++23ã§constexpr察å¿ãã颿°ã®æ¡ä»¶ã¯ä»¥äžïŒ
- æçæ°ã®éåããŸãã¯å®æ°ã®ã©ãã«ãå¯ã§ãªãéšåéåã«äœçšãããšèŠãªããã颿°ãéããŠããããš
- 颿°ãäžžãã¢ãŒãã«åŒ·ãäŸåããªãããš
exp()ãlog()ãsqrt()ãcos()ãsin()ã¯1. ã®æ¡ä»¶ãæºãããªããããC++23ã§ã¯constexprã«å¯Ÿå¿ããªãã
nearbyint()ã¯2. ã®æ¡ä»¶ãæºãããªããããC++23ã§ã¯constexprã«å¯Ÿå¿ããªãã
ãã ããã³ã³ãã€ã©ãå
è¡ããŠconstexpré察å¿ã®é¢æ°ã察å¿ããŠããå¯èœæ§ãããã
ãªããC++20ã§ã¯lerp()ã®ã¿constexprã«å¯Ÿå¿ããŠãããããã¯Cæšæºã©ã€ãã©ãªããã®ç§»æ€ã§ã¯ãªããC++ã§æšæºåããã颿°ã ããã§ãã (errnoãæµ®åå°æ°ç¹äŸå€ã®ãããªã°ããŒãã«ç¶æ
ã䜿çšããªã)ã
æ¡åŒµæµ®åå°æ°ç¹æ°åãžã®å¯Ÿå¿
C++23ã§ã¯<stdfloat>ã«æ¡åŒµæµ®åå°æ°ç¹æ°åã远å ãããããã®å¯Ÿå¿ãšããŠã以äžã®ãããªfloatãdoubleãlong doubleã«å¯ŸãããªãŒããŒããŒãã¯ã
float abs(float x);
double abs(double x);
long double abs(long double x);
以äžã®ããã«floating-point-typeãžã®ãªãŒããŒããŒãã«çµ±åãããæ¡åŒµæµ®åå°æ°ç¹æ°åãæ±ããããã«ãªã£ãã
floating-point-type abs(floating-point-type x);
ãšã©ãŒã®æ±ã
<cmath> ã§æäŸãããå颿°ã¯ãç¹ã«æèšãããŠããªãéããåŒæ°ã®åã衚çŸã§ããå
šãŠã®å€ã«ã€ããŠã®æåãå®çŸ©ãããŠããã
ãªããããã§èšããæåãå®çŸ©ãããŠããããšã¯ãæªå®çŸ©åäœãåŒãèµ·ãããªããšããã ãã§ããšã©ãŒãçºçããããå®è£
äŸåã®æåãšãªãå Žåãããäºã«æ³šæã
<cmath> ã§æäŸãããå颿°ã«ãããŠãšã©ãŒãçºçããå Žåãerrnoããããã¯ãæµ®åå°æ°ç¹äŸå€ã®ããããããããã¯äž¡æ¹ã«ãã£ãŠãšã©ãŒãéç¥ãããã
C++11 以éã®å Žåãã©ã¡ãã®æ¹æ³ã«ãã£ãŠéç¥ãããã㯠math_errhandling ã®å€ã«ãã£ãŠå€å¥å¯èœã§ãããïŒå©çšè
ãéžæããäºã¯ã§ããªãïŒ
C++98 ãŸã§ã®å Žåãerrno ã§ããéç¥ãããªãã
errno ã«ãããšã©ãŒã®éç¥
errno ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåããšã©ãŒå
容㯠errno ã«èšå®ãããå€ã«ãã£ãŠå€å¥å¯èœã§ããã
ãªãããšã©ãŒãçºçããªãã£ãå Žåã§ã errno ãã¯ãªã¢ãããäºã¯ç¡ãã®ã§ããšã©ãŒçºçã®æç¡ã errno ã§å€æããããã«ã¯ããããã errno ã«ãŒããèšå®ããŠããå¿
èŠãããã
æµ®åå°æ°ç¹äŸå€ã«ãããšã©ãŒã®éç¥ïŒC++11 以éïŒ
åç§°ã«ãäŸå€ããšä»ããŠããããC++ ã®äŸå€ãšã¯å
šãé¢ä¿ãªãããæ³šæã
æµ®åå°æ°ç¹äŸå€ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåããšã©ãŒå
å®¹ã¯æµ®åå°æ°ç¹ç¶æ
ãã©ã°ã«èšå®ããããããfetestexcept ã«ãã£ãŠå€å¥å¯èœã§ããã
ãªãããšã©ãŒãçºçããªãã£ãå Žåã§ãæµ®åå°æ°ç¹ç¶æ
ãã©ã°ãã¯ãªã¢ãããäºã¯ç¡ãã®ã§ããšã©ãŒçºçã®æç¡ãæµ®åå°æ°ç¹ç¶æ
ãã©ã°ã§å€æããããã«ã¯ããããã feclearexcept ã§æµ®åå°æ°ç¹ç¶æ
ãã©ã°ãã¯ãªã¢ããŠããå¿
èŠãããã
ãšã©ãŒã®çš®é¡
<cmath> ã§æäŸãããå颿°ã§çºçãããšã©ãŒã¯ã以äžã® 5 çš®é¡ããã
å®çŸ©åãšã©ãŒïŒdomain errorïŒ
åŒæ°ã®å€ãã颿°ã®æ°åŠçãªå®çŸ©åã®ç¯å²å€ã§ããããšã瀺ããšã©ãŒãïŒäŸïŒsqrt(-1.0) ããasin(2.0) çïŒ
å®çŸ©åãšã©ãŒãçºçããªããã°ãªããªãæ¡ä»¶ã¯é¢æ°æ¯ã«èŠæ Œã§èŠå®ãããŠããããæ°åŠçãªå®çŸ©ãšæŽåçã§ããå Žåã«ã¯è¿œå ã®æ¡ä»¶ã§å®çŸ©åãšã©ãŒãçºçããäºãåŠçç³»ã«èš±ãããŠããã
å®çŸ©åãšã©ãŒãçºçããå Žåãéç¥ã¯ä»¥äžã®ããã«è¡ãããã
errnoã«ãã£ãŠãšã©ãŒãéç¥ãããå ŽåãEDOMïŒå®çŸ©åãšã©ãŒãError DOMainïŒãèšå®ãããã- æµ®åå°æ°ç¹äŸå€ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåã
FE_INVALIDïŒç¡å¹æŒç®æµ®åå°æ°ç¹äŸå€ïŒãèšå®ãããã
å®çŸ©åãšã©ãŒãçºçããå Žåã颿°ã®æ»ãå€ã¯åŠçç³»å®çŸ©ã§ããããæ»ãå€ã®åã quiet NaNïŒquiet Not a NumberïŒéããªéæ°ïŒã衚çŸå¯èœïŒstd::numeric_limits<T>::has_quiet_NaN ãçïŒã®å Žåãäžè¬çã«ã¯ quiet NaN ãè¿ãã
極ãšã©ãŒïŒpole errorïŒ
åŒæ°ã®å€ãæéå€ã§ããå Žåã«ã颿°ã®åœè©²å€ã«å¯Ÿããæ°åŠçãªæ¥µéå€ãç¡é倧ã§ããããšã瀺ããšã©ãŒãïŒäŸïŒlog(0.0) ããatanh(1.0) çïŒ
åŒæ°ã®å€ãç¡é倧ã®å Žåã«ã¯ã極ãšã©ãŒã§ã¯ãªãã®ã§æ³šæã
極ãšã©ãŒãçºçããªããã°ãªããªãæ¡ä»¶ã¯é¢æ°æ¯ã«èŠæ Œã§èŠå®ãããŠããããæ°åŠçãªå®çŸ©ãšæŽåçã§ããå Žåã«ã¯è¿œå ã®æ¡ä»¶ã§æ¥µãšã©ãŒãçºçããäºãåŠçç³»ã«èš±ãããŠããã
極ãšã©ãŒãçºçããå Žåãéç¥ã¯ä»¥äžã®ããã«è¡ãããã
errnoã«ãã£ãŠãšã©ãŒãéç¥ãããå ŽåãERANGEïŒå€åãšã©ãŒãError RANGEïŒãèšå®ãããã- æµ®åå°æ°ç¹äŸå€ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåã
FE_DIVBYZEROïŒãŒãé€ç®æµ®åå°æ°ç¹äŸå€ïŒãèšå®ãããïŒæ³šïŒããŒãé€ç®æµ®åå°æ°ç¹äŸå€ãã¯èª€èšã§ã¯ç¡ãïŒã
極ãšã©ãŒãçºçããå Žåã颿°ã®æ»ãå€ã¯åŠçç³»å®çŸ©ã§ããããæ»ãå€ã®åãæµ®åå°æ°ç¹æ°ã®å Žåãäžè¬çã«ã¯ HUGE_VALïŒdoubleïŒãHUGE_VALFïŒfloat ãC++11 以éã®ã¿ïŒãHUGE_VALLïŒlong doubleãC++11 以éã®ã¿ïŒã«æ£ãã笊å·ãä»å ããå€ãè¿ãã
ãŸããæ»ãå€ã®åãç¡é倧ã衚çŸå¯èœïŒstd::numeric_limits<T>::has_infinity ãçïŒã®å Žåãäžè¬çã«ã¯ç¡é倧ïŒstd::numeric_limits<T>::infinity()ïŒãè¿ãã
ãªãããã¯ã INFINITY ããå®çŸ©ãããŠããå Žåã«ã¯ç¡é倧ã衚ããã®ã§ã¯ããããfloat åã§ããããšã«æ³šæã
ãªãŒããŒãããŒãšã©ãŒïŒoverflow errorïŒ
æ»ãå€ãæéã ã倧ãããããããäœåãªäžžã誀差ç¡ãã§ã¯æ»ãå€ã®åã§è¡šãäºãåºæ¥ãªãããšã瀺ããšã©ãŒã
ãªãŒããŒãããŒãšã©ãŒãçºçããå Žåãéç¥ã¯ä»¥äžã®ããã«è¡ãããã
errnoã«ãã£ãŠãšã©ãŒãéç¥ãããå ŽåãERANGEïŒå€åãšã©ãŒãError RANGEïŒãèšå®ãããã- æµ®åå°æ°ç¹äŸå€ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåã
FE_OVERFLOWïŒãªãŒããŒãããŒæµ®åå°æ°ç¹äŸå€ïŒãèšå®ãããã
ãªãŒããŒãããŒãšã©ãŒãçºçããå Žåãæ»ãå€ã®åãæµ®åå°æ°ç¹åã§ããã©ã«ãã®äžžãã¢ãŒããæå¹ã§ããã°ãHUGE_VALïŒdoubleïŒãHUGE_VALFïŒfloat ãC++11 以éã®ã¿ïŒãHUGE_VALLïŒlong doubleãC++11 以éã®ã¿ïŒã«æ£ãã笊å·ãä»å ããå€ãè¿ãã
ã¢ã³ããŒãããŒãšã©ãŒïŒunderflow errorïŒ
æ»ãå€ã®çµ¶å¯Ÿå€ãå°ãããããããäœåãªäžžã誀差ç¡ãã§ã¯æ»ãå€ã®åã§è¡šãäºãåºæ¥ãªãããšã瀺ããšã©ãŒã
ã¢ã³ããŒãããŒãšã©ãŒãçºçããå Žåã§ãåŠçç³»ã«ãã£ãŠã¯ãšã©ãŒã®éç¥ãè¡ãããªããïŒèŠæ Œã§ãšã©ãŒã®éç¥ãä»»æãšãªã£ãŠããããïŒãéç¥ãããå Žåã«ã¯ä»¥äžã®ããã«è¡ãããã
errnoã«ãã£ãŠãšã©ãŒãéç¥ãããå ŽåãERANGEïŒå€åãšã©ãŒãError RANGEïŒãèšå®ãããã- æµ®åå°æ°ç¹äŸå€ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåã
FE_UNDERFLOWïŒã¢ã³ããŒãããŒæµ®åå°æ°ç¹äŸå€ïŒãèšå®ãããã
ã¢ã³ããŒãããŒãšã©ãŒãçºçããå Žåã颿°ã®æ»ãå€ã¯åŠçç³»å®çŸ©ã§ããããæ»ãå€ã®çµ¶å¯Ÿå€ã¯ãã®åã«ãããæå°ã®æ£ã®æ£èŠåæ°ïŒstd::numeric_limits<T>::min()ïŒä»¥äžã§ãããïŒéæ£èŠåæ°ããããã¯ããŒããå«ãïŒ
äžæ£ç¢ºãšã©ãŒïŒinexact errorïŒ
æ»ãå€ãæ»ãå€ã®åã§ã¯æ£ç¢ºã«è¡šãäºãåºæ¥ãªãããšã瀺ããšã©ãŒãïŒäŸïŒexp(1.0) ããsqrt(2.0) çïŒ
æµ®åå°æ°ç¹æŒç®ã§ã¯ã»ãšãã©ã®å Žåã«çºçããã
äžæ£ç¢ºãšã©ãŒãçºçããå Žåã§ãåŠçç³»ã«ãã£ãŠã¯ãšã©ãŒã®éç¥ãè¡ãããªããïŒèŠæ Œã§ãšã©ãŒã®éç¥ãä»»æãšãªã£ãŠããããïŒãéç¥ãããå Žåã«ã¯ä»¥äžã®ããã«è¡ãããã
errnoã«ãããšã©ãŒã®éç¥ã¯è¡ãããªãã- æµ®åå°æ°ç¹äŸå€ã«ãã£ãŠãšã©ãŒãéç¥ãããå Žåã
FE_INEXACTïŒäžæ£ç¢ºæµ®åå°æ°ç¹äŸå€ïŒãèšå®ãããã
äžæ£ç¢ºãšã©ãŒãçºçããå Žåã颿°ã®æ»ãå€ã¯çã®å€ãäžžããå€ãšãªããããã®éã®äžžãæ¹åŒã¯åŠçç³»å®çŸ©ã§ãããïŒé¢æ°ã«ç¹å¥ã«èŠå®ãããå Žåãé€ãïŒ
ç¹ã«ãfesetround ã§èšå®ããäžžãæ¹åŒã«åŸããšã¯éããªããããæ³šæãå¿
èŠã§ããã
宿°åŒã«ãªãæ¡ä»¶
constexpr察å¿ããæ°åŠé¢æ°ã«ãããŠã以äžã®ããããã®æ¡ä»¶ã«åèŽããå Žåã宿°åŒãšãªããªã (åŒæ°ã«ãã£ãŠã³ã³ãã€ã«ãšã©ãŒã«ãªã)
FE_INEXACT以å€ã®ã以äžã®æµ®åå°æ°ç¹äŸå€ãçºçããå ŽåïŒFE_DIVBYZERO(ãŒãé€ç®)FE_INVALID(äžæ£ãªæŒç®)FE_OVERFLOW(ãªãŒããŒãããŒ)FE_UNDERFLOW(ã¢ã³ããŒãããŒ)
math_errhandling & MATH_ERRNOãçã§ãerrnoãèšå®ãããå Žå
NaN ã®æ±ã
æµ®åå°æ°ç¹èŠæ ŒISO/IEC 60559 (IEEE 754) ã«æºæ ããç°å¢ã§ã¯ãCèšèªèŠæ Œã® Annex F (F.10 paragraph 11) ã«ããã以äžã®äžè¬èŠåãå®ããããŠããïŒ
NaN ã®åŒæ°ããã€é¢æ°ã¯ãNaN ã®çµæãè¿ããæµ®åå°æ°ç¹äŸå€ãçºçãããªãããã ããåå¥ã«èŠå®ãããå Žåãé€ãã
ãã®èŠå㯠__STDC_IEC_559__ ãå®çŸ©ãããŠããïŒISO/IEC 60559 ã«æºæ ããïŒç°å¢ã§é©çšãããã
ãŸããæšå¥šãããå®è£ ãšããŠãã²ãšã€ä»¥äžã® NaN åŒæ°ããã€é¢æ°ã NaN ãè¿ãå Žåããã®çµæã¯å ¥åã® NaN åŒæ°ã®ãããããšåãå€ïŒå倿åŸã笊å·ã¯ç°ãªãå¯èœæ§ãããïŒã§ããããšãæãŸãããšãããŠããã
äŸå€ãšãªã颿°
以äžã®é¢æ°ã¯ãNaN ã®åŒæ°ãåãåã£ãŠã NaN ãè¿ããªãå ŽåãããïŒ
| 颿° | æ¡ä»¶ | çµæ |
|---|---|---|
pow |
pow(1.0, NaN) |
1.0 |
pow |
pow(NaN, ±0.0) |
1.0 |
hypot |
hypot(屉, NaN) |
+â |
fmax |
äžæ¹ã®ã¿ã NaN | NaN ã§ãªãæ¹ã®åŒæ° |
fmin |
äžæ¹ã®ã¿ã NaN | NaN ã§ãªãæ¹ã®åŒæ° |
pow ãš hypot ã®äŸå€ã¯ãNaN ãã©ã®ãããªå®æ°å€ã«çœ®ãæããŠãçµæãåãã«ãªããšããååã«åºã¥ããŠããïŒä»»æã®å®æ°ã® 0 ä¹ã¯ 1ãä»»æã®å®æ°ãšç¡é倧㮠hypot ã¯ç¡é倧ïŒã
fmax ãš fmin ã¯ãNaN ãæ¬ æå€ãšããŠæ±ããæå¹ãªæ°å€ãåªå
ããŠè¿ãããã ããäž¡æ¹ã®åŒæ°ã NaN ã®å Žå㯠NaN ãè¿ãã
ãªããæ°å€åé¡é¢æ°ïŒfpclassifyãisnanãisinf çïŒã¯æ»ãå€ãæŽæ°åã§ãããããNaN ã®äŒæèŠåã®å¯Ÿè±¡å€ã§ããã
äžè§é¢æ°
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
sin |
æ£åŒŠé¢æ°ïŒãµã€ã³ïŒ | |
cos |
äœåŒŠé¢æ°ïŒã³ãµã€ã³ïŒ | |
tan |
æ£æ¥é¢æ°ïŒã¿ã³ãžã§ã³ãïŒ | |
asin |
éæ£åŒŠé¢æ°ïŒã¢ãŒã¯ãµã€ã³ïŒ | |
acos |
éäœåŒŠé¢æ°ïŒã¢ãŒã¯ã³ãµã€ã³ïŒ | |
atan |
鿣æ¥é¢æ°ïŒã¢ãŒã¯ã¿ã³ãžã§ã³ãïŒ | |
atan2 |
察蟺ãšé£èŸºããã®éæ£æ¥é¢æ°ïŒã¢ãŒã¯ã¿ã³ãžã§ã³ãïŒ |
åæ²ç·é¢æ°
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
sinh |
åæ²ç·æ£åŒŠé¢æ°ïŒãã€ãããªãã¯ãµã€ã³ïŒ | |
cosh |
åæ²ç·äœåŒŠé¢æ°ïŒãã€ãããªãã¯ã³ãµã€ã³ïŒ | |
tanh |
åæ²ç·æ£æ¥é¢æ°ïŒãã€ãããªãã¯ã¿ã³ãžã§ã³ãïŒ | |
asinh |
éåæ²ç·æ£åŒŠé¢æ°ïŒãšãªã¢ãã€ãããªãã¯ãµã€ã³ïŒ | C++11 |
acosh |
éåæ²ç·äœåŒŠé¢æ°ïŒãšãªã¢ãã€ãããªãã¯ã³ãµã€ã³ïŒ | C++11 |
atanh |
éåæ²ç·æ£æ¥é¢æ°ïŒãšãªã¢ãã€ãããªãã¯ã¿ã³ãžã§ã³ãïŒ | C++11 |
ææ°é¢æ°ãšå¯Ÿæ°é¢æ°
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
exp |
e (ãã€ãã¢æ°) ãåºãšããææ°é¢æ° | |
exp2 |
2 ãåºãšããææ°é¢æ° | C++11 |
expm1 |
e (ãã€ãã¢æ°) ãåºãšããææ°é¢æ°ãã 1 ãåŒããå€ | C++11 |
log |
e (ãã€ãã¢æ°) ãåºãšããèªç¶å¯Ÿæ° | |
log10 |
10 ãåºãšããåžžçšå¯Ÿæ° | |
log1p |
åŒæ°ã« 1 ãè¶³ããå€ã®ãe (ãã€ãã¢æ°) ãåºãšããèªç¶å¯Ÿæ° | C++11 |
log2 |
2 ãåºãšããäºé²å¯Ÿæ° | C++11 |
ä»®æ°ãšææ°
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
ldexp |
2 ã®çޝä¹ãšã®ä¹ç® | |
frexp |
ä»®æ°éšãš 2 ã®çޝä¹ãžã®åè§£ | |
ilogb |
ææ°éšã笊å·ä»ãæŽæ°å€ãšããŠæœåº | C++11 |
logb |
ææ°éšãæµ®åå°æ°ç¹æ°å€ãšããŠæœåº | C++11 |
modf |
æŽæ°éšãšå°æ°éšãžã®åè§£ | |
scalbn |
å
éšè¡šçŸã®åºæ° (FLT_RADIX) ã®çޝä¹ãšã®ä¹ç® |
C++11 |
scalbln |
å
éšè¡šçŸã®åºæ° (FLT_RADIX) ã®çޝä¹ãšã®ä¹ç®ã乿°ãšããŠlongããšã |
C++11 |
环ä¹ã»åªæ ¹ãšçµ¶å¯Ÿå€
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
pow |
çŽ¯ä¹ | |
sqrt |
å¹³æ¹æ ¹ | |
cbrt |
ç«æ¹æ ¹ | C++11 |
hypot |
å¹³æ¹åã®å¹³æ¹æ ¹ | C++11 |
abs |
çµ¶å¯Ÿå€ | |
fabs |
çµ¶å¯Ÿå€ |
èª€å·®é¢æ°ãšã¬ã³ã颿°
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
erf |
èª€å·®é¢æ° | C++11 |
erfc |
çžè£èª€å·®é¢æ° | C++11 |
tgamma |
ã¬ã³ã颿° | C++11 |
lgamma |
ã¬ã³ã颿°ã®èªç¶å¯Ÿæ° | C++11 |
ãã®ä»ç¹æ®é¢æ°
以äžã®é¢æ°ã¯åŒæ°ã« NaN ãæž¡ãããå Žåã NaN ãè¿ããªããã°ãªããªããå®çŸ©åãšã©ãŒãå ±åããŠã¯ãªããªãã åŒæ°ã NaN ã§ã¯ãªããæ¬¡ã®æ¡ä»¶ãäžã€ã§ãæºããå Žåãå®çŸ©åãšã©ãŒãå ±åããªããã°ãªããªã:
- èŠæ Œã颿°ã®å®çŸ©åãæç€ºããŠã㊠(å解説ããŒãžãåç §)ããã®å®çŸ©åå ã«ãªã
- æ°åŠé¢æ°ã®å€ã®èéšã 0 ã§ãªã
- æ°åŠé¢æ°ãæ°åŠçã«å®çŸ©ãããŠããªã
æ°åŠé¢æ°ãæ°åŠçã«å®çŸ©ãããã®ã¯ä»¥äžã®ããããã®å Žåã§ãã:
- ããéåã«ãããŠæç€ºçã«å®çŸ©ãããŠãã
- 極éãååšãã (峿¥µéãšå·Šæ¥µéãååšããäžèŽãã)
ç¹èšã®ãªãéãã以äžã®é¢æ°ã¯å šãŠã®æéå€ãšæ£è² ã®ç¡é倧ã«ãããŠå®çŸ©ãããã
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
assoc_laguerre |
ã©ã²ãŒã«éªå€é åŒ | C++17 |
assoc_legendre |
ã«ãžã£ã³ãã«éªé¢æ° | C++17 |
beta |
ããŒã¿é¢æ° | C++17 |
comp_ellint_1 |
第1çš®å®å šæ¥åç©å | C++17 |
comp_ellint_2 |
第2çš®å®å šæ¥åç©å | C++17 |
comp_ellint_3 |
第3çš®å®å šæ¥åç©å | C++17 |
cyl_bessel_i |
第1çš®å€åœ¢ããã»ã«é¢æ° | C++17 |
cyl_bessel_j |
第1çš®ããã»ã«é¢æ° | C++17 |
cyl_bessel_k |
第2çš®å€åœ¢ããã»ã«é¢æ° | C++17 |
cyl_neumann |
第2çš®ããã»ã«é¢æ° | C++17 |
ellint_1 |
第1çš®äžå®å šæ¥åç©å | C++17 |
ellint_2 |
第2çš®äžå®å šæ¥åç©å | C++17 |
ellint_3 |
第3çš®äžå®å šæ¥åç©å | C++17 |
expint |
ææ°ç©å | C++17 |
hermite |
ãšã«ããŒãå€é åŒ | C++17 |
laguerre |
ã©ã²ãŒã«å€é åŒ | C++17 |
legendre |
ã«ãžã£ã³ãã«å€é åŒ | C++17 |
riemann_zeta |
ãªãŒãã³ã®ãŒãŒã¿é¢æ° | C++17 |
sph_bessel |
第1çš®çããã»ã«é¢æ° | C++17 |
sph_legendre |
çé¢èª¿å颿°ã® Ξ æå | C++17 |
sph_neumann |
第2çš®çããã»ã«é¢æ° | C++17 |
æè¿åæŽæ°
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
ceil |
倩äºé¢æ°ïŒåŒæ°ããå°ãããªãæè¿åã®æŽæ°ïŒ | |
floor |
åºé¢æ°ïŒåŒæ°ãã倧ãããªãæè¿åã®æŽæ°ïŒ | |
trunc |
ãŒãæ¹åãžã®äžžã | C++11 |
round |
åæšäºå ¥ã«ããäžžã | C++11 |
lround |
long åãžã®åæšäºå
¥ã«ããäžžã |
C++11 |
llround |
long long åãžã®åæšäºå
¥ã«ããäžžã |
C++11 |
nearbyint |
çŸåšã®äžžãã¢ãŒãã«ããäžžã | C++11 |
rint |
çŸåšã®äžžãã¢ãŒãã«ããäžžã | C++11 |
lrint |
long åãžã®çŸåšã®äžžãã¢ãŒãã«ããäžžã |
C++11 |
llrint |
long long åãžã®çŸåšã®äžžãã¢ãŒãã«ããäžžã |
C++11 |
å°äœ
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
fmod |
æµ®åå°æ°ç¹å°äœ | |
remainder |
笊å·ä»ãã®æµ®åå°æ°ç¹å°äœ | C++11 |
remquo |
åãšæµ®åå°æ°ç¹å°äœ | C++11 |
æµ®åå°æ°ç¹æäœ
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
copysign |
笊å·ã®ã³ã㌠| C++11 |
nan |
æååãã quiet NaN ãžã®å€æ | C++11 |
nanf |
æååãã quiet NaN ãžã®å€æ | C++11 |
nanl |
æååãã quiet NaN ãžã®å€æ | C++11 |
nextafter |
æå®æ¹åãžã®æ¬¡ã®è¡šçŸå¯èœãªå€ | C++11 |
nexttoward |
æå®æ¹åãžã®æ¬¡ã®è¡šçŸå¯èœãªå€ | C++11 |
nextup |
æ£ã®ç¡é倧æ¹åãžã®æ¬¡ã®è¡šçŸå¯èœãªå€ | C++26 |
nextdown |
è² ã®ç¡é倧æ¹åãžã®æ¬¡ã®è¡šçŸå¯èœãªå€ | C++26 |
æå€§å€ã»æå°å€ãšæ£ã®å·®
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
fmax |
æå€§å€ (-0.0ãš+0.0ã§ã¯æªèŠå®ãNaNãšå€ã§ã¯å€ãè¿ã) |
C++11 |
fmin |
æå°å€ (-0.0ãš+0.0ã§ã¯æªèŠå®ãNaNãšå€ã§ã¯å€ãè¿ã) |
C++11 |
fmaximum |
æå€§å€ (-0.0ãš+0.0ã§ã¯+0.0ãNaNãšå€ã§ã¯NaNãè¿ã) |
C++26 |
fmaximum_num |
æå€§å€ (-0.0ãš+0.0ã§ã¯+0.0ãNaNãšå€ã§ã¯å€ãè¿ã) |
C++26 |
fminimum |
æå°å€ (-0.0ãš+0.0ã§ã¯-0.0ãNaNãšå€ã§ã¯NaNãè¿ã) |
C++26 |
fminimum_num |
æå°å€ (-0.0ãš+0.0ã§ã¯-0.0ãNaNãšå€ã§ã¯å€ãè¿ã) |
C++26 |
fdim |
æ£ã®å·® | C++11 |
ä¹ç®-å ç®
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
fma |
ä¹ç®ãšå ç®ã®åæ | C++11 |
ç·åœ¢è£é
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
lerp |
ç·åœ¢è£é | C++20 |
æ°å€åé¡
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
fpclassify |
æ°å€ã NaNãç¡éå€§ãæ£èŠåæ°ã鿣èŠåæ°ã0 ãŸãã¯ä»ã®åŠçç³»å®çŸ©ã®ã«ããŽãªã«åé¡ | C++11 |
isfinite |
æ°å€ãæéã§ãããå€å® | C++11 |
isinf |
æ°å€ãç¡é倧ã§ãããå€å® | C++11 |
isnan |
æ°å€ã NaN ã§ãããå€å® | C++11 |
isnormal |
æ°å€ãæ£èŠåæ°ã§ãããå€å® | C++11 |
signbit |
æ°å€ã®ç¬Šå·ãè² ã§ãããå€å® | C++11 |
æ°å€æ¯èŒ
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
isgreater |
第 1 åŒæ°ã第 2 åŒæ°ãã倧ãããå€å® | C++11 |
isgreaterequal |
第 1 åŒæ°ã第 2 åŒæ°ä»¥äžãå€å® | C++11 |
isless |
第 1 åŒæ°ã第 2 åŒæ°ããå°ãããå€å® | C++11 |
islessequal |
第 1 åŒæ°ã第 2 åŒæ°ä»¥äžãå€å® | C++11 |
islessgreater |
第 1 åŒæ°ã第 2 åŒæ°ããå°ãããããããã¯å€§ãããå€å® | C++11 |
isunordered |
第 1 åŒæ°ãšç¬¬ 2 åŒæ°ãé åºä»ããããŠããªããå€å® | C++11 |
å
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
float_t |
float 以äžã®æµ®åå°æ°ç¹æ°å |
C++11 |
double_t |
double 以äžã®æµ®åå°æ°ç¹æ°å |
C++11 |
æ°å€ã®ãã¯ã
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
HUGE_VAL |
double åã®æ£ã®å·šå€§å€ |
|
HUGE_VALF |
float åã®æ£ã®å·šå€§å€ |
C++11 |
HUGE_VALL |
long double åã®æ£ã®å·šå€§å€ |
C++11 |
INFINITY |
float åã®æ£ã®ç¡é倧 |
C++11 |
NAN |
float åã® quiet NaN |
C++11 |
æ°å€åé¡ã®ãã¯ã
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
FP_INFINITE |
æ°å€åé¡ã§ç¡é倧ãè¡šãæŽæ°å®æ°åŒ | C++11 |
FP_NAN |
æ°å€åé¡ã§ NaN ãè¡šãæŽæ°å®æ°åŒ |
C++11 |
FP_NORMAL |
æ°å€åé¡ã§æ£èŠåæ°ãè¡šãæŽæ°å®æ°åŒ | C++11 |
FP_SUBNORMAL |
æ°å€åé¡ã§éæ£èŠåæ°ãè¡šãæŽæ°å®æ°åŒ | C++11 |
FP_ZERO |
æ°å€åé¡ã§æµ®åå°æ°ç¹æ°ã® 0 ãè¡šãæŽæ°å®æ°åŒ | C++11 |
ãã®ä»ã®ãã¯ã
| åå | 説æ | 察å¿ããŒãžã§ã³ |
|---|---|---|
FP_FAST_FMA |
double åã® fma 颿°ãããé«éãªå®è£
ã§ããã |
C++11 |
FP_FAST_FMAF |
float åã® fma 颿°ãããé«éãªå®è£
ã§ããã |
C++11 |
FP_FAST_FMAL |
long double åã® fma 颿°ãããé«éãªå®è£
ã§ããã |
C++11 |
FP_ILOGB0 |
ilogb(0) ã®æ»ãå€ãè¡šãæŽæ°å®æ°åŒ |
C++11 |
FP_ILOGBNAN |
ilogb(NaN) ã®æ»ãå€ãè¡šãæŽæ°å®æ°åŒ |
C++11 |
MATH_ERRNO |
æ°åŠã©ã€ãã©ãªå
ã§errnoã«ãšã©ãŒãèšå®ãããããè¡šãæŽæ°å®æ° |
C++11 |
MATH_ERREXCEPT |
æ°åŠã©ã€ãã©ãªå ã§æµ®åå°æ°ç¹äŸå€ãçºçããããè¡šãæŽæ°å®æ° | C++11 |
math_errhandling |
<cmath> å
ã®é¢æ°ããšã©ãŒãã©ã®ããã«åãæ±ããã衚ããã¯ã |
C++11 |
é¢é£é ç®
åç §
- N1568 Proposed additions to TR-1 to improve compatibility with C99
- P0175R0 Synopses for the C library
- C++17 ãã
fãlãµãã£ãã¯ã¹ä»ãã®C颿°ãå°å ¥
- C++17 ãã
- P0533R9 constexpr for
<cmath>and<cstdlib>- C++23ã§ã®ãäžéšé¢æ°ã®
constexpr察å¿
- C++23ã§ã®ãäžéšé¢æ°ã®