いつの間にか cbrt() という関数が C にも入っているんだ
(cbrt(
) は
を返す)。
hypot() が3つの引数を許すとか (hypot(
,
,
)
は
を返す)。
| [ |
l]test-cmath-func.cpp
// test-cmath-func.cpp
// c++ -std=c++20 -O -o test-cmath-func test-cmath-func.cpp
#include <iostream>
#include <iomanip> // setprecision()
#include <cmath>
#include <numbers>
using namespace std;
int main(void)
{
double x=-1.234;
double integral_part;
int exponent;
double pi=std::numbers::pi;
cout << setprecision(16);
cout << "x=" << x << endl;
cout << "abs(x)=" << abs(x) << endl;
cout << "fabs(x)=" << fabs(x) << endl;
cout << "sqrt(x)=" << sqrt(x) << endl;
cout << "sqrt(abs(x))=" << sqrt(abs(x)) << endl;
cout << "exp(1.0)=" << exp(1.0) << endl;
cout << "log(exp(x))=" << log(exp(x)) << endl;
cout << "log10(exp(1.0))=" << log10(exp(1.0)) << endl;
cout << "cos(std::numbers::pi / 3.0)=" << cos(std::numbers::pi / 3.0) << endl;
cout << "4*acos(cos(pi/4))=" << 4*acos(cos(pi/4)) << endl;
cout << "2*(acos(x/2)+asin(x/2))=" << 2*(acos(x/2)+asin(x/2)) << endl;
cout << "tan(pi/4)=" << tan(pi/4) << endl;
cout << "4*atan(1.0)=" << 4*atan(1.0) << endl;
cout << "atan2(-1.0,-1.0)/pi=" << atan2(-1.0,-1.0)/pi << endl;
cout << "cosh(x)*cosh(x)-sinh(x)*sinh(x)=" << cosh(x)*cosh(x)-sinh(x)*sinh(x)
<< endl;
cout << "tanh(10.0) =" << tanh(10.0) << endl;
cout << "modf(12.345,&integral_part)="
<< modf(12.345,&integral_part) << endl;
cout << "integral_part=" << integral_part << endl;
cout << "modf(-12.345,&integral_part)="
<< modf(-12.345,&integral_part) << endl;
cout << "integral_part=" << integral_part << endl;
cout << "frexp(1024*0.567890123456789,&exponent)="
<< frexp(1024*0.567890123456789,&exponent) << endl;
cout << "exponent=" << exponent << endl;
cout << "frexp(ldexp(0.567890123456789,10),&exponent)="
<< frexp(ldexp(0.567890123456789,10),&exponent) << endl;
cout << "exponent=" << exponent << endl;
// C++
cout << "cbrt((-1.2)*(-1.2)*(-1.2))=" << cbrt((-1.2)*(-1.2)*(-1.2)) << endl;
cout << "ceil(1.5)=" << ceil(1.5) << ", ceil(-1.5)=" << ceil(-1.5) << endl;
cout << "floor(1.5)=" << floor(1.5) << ", floor(-1.5)=" << floor(-1.5) << endl;
cout << "exp2(10.0)=" << exp2(10.0) << endl;
cout << "expm1(1.23456789012345e-8)=" << expm1(1.23456789012345e-8) << endl;
cout << "exp(1.23456789012345e-8)-1=" << exp(1.23456789012345e-8)-1 << endl;
cout << "hypot(3e200,4e200)=" << hypot(3e200,4e200) << endl;
cout << "sqrt(3e200*3e200+4e200*4e200)=" << sqrt(3e200*3e200+4e200*4e200) << endl;
cout << "hypot(3.0,4.0,12.0)=" << hypot(3.0,4.0,12.0) << " (3^2+4^2=5^2, 5^2+12^2=13^2)" << endl;
}
|
| コンパイル&実行結果 |
% c++ -std=c++20 -O -o test-cmath-func test-cmath-func.cpp % ./test-cmath-func x=-1.234 abs(x)=1.234 fabs(x)=1.234 sqrt(x)=nan sqrt(abs(x))=1.110855526159905 exp(1.0)=2.718281828459045 log(exp(x))=-1.234 log10(exp(1.0))=0.4342944819032518 cos(std::numbers::pi / 3.0)=0.5000000000000001 4*acos(cos(pi/4))=3.141592653589793 2*(acos(x/2)+asin(x/2))=3.141592653589794 tan(pi/4)=0.9999999999999999 4*atan(1.0)=3.141592653589793 atan2(-1.0,-1.0)/pi=-0.75 cosh(x)*cosh(x)-sinh(x)*sinh(x)=1 tanh(10.0) =0.9999999958776927 modf(12.345,&integral_part)=0.3450000000000006 integral_part=12 modf(-12.345,&integral_part)=-0.3450000000000006 integral_part=-12 frexp(1024*0.567890123456789,&exponent)=0.567890123456789 exponent=10 frexp(ldexp(0.567890123456789,10),&exponent)=0.567890123456789 exponent=10 cbrt((-1.2)*(-1.2)*(-1.2))=-1.2 ceil(1.5)=2, ceil(-1.5)=-1 floor(1.5)=1, floor(-1.5)=-2 exp2(10.0)=1024 expm1(1.23456789012345e-8)=1.234567897744239e-08 exp(1.23456789012345e-8)-1=1.234567892360872e-08 hypot(3e200,4e200)=5e+200 sqrt(3e200*3e200+4e200*4e200)=inf hypot(3.0,4.0,12.0)=13 (3^2+4^2=5^2, 5^2+12^2=13^2) % |