]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multiprecision/example/cpp_complex_examples.cpp
1 ///////////////////////////////////////////////////////////////
2 // Copyright 2018 Nick Thompson. Distributed under the Boost
3 // Software License, Version 1.0. (See accompanying file
4 // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
6 /*`This example demonstrates the usage of the MPC backend for multiprecision complex numbers.
7 In the following, we will show how using MPC backend allows for the same operations as the C++ standard library complex numbers.
13 #include <boost/multiprecision/cpp_complex.hpp>
15 template<class Complex
>
16 void complex_number_examples()
19 std::cout
<< std::setprecision(std::numeric_limits
<typename
Complex::value_type
>::digits10
);
20 std::cout
<< std::scientific
<< std::fixed
;
21 std::cout
<< "Print a complex number: " << z1
<< std::endl
;
22 std::cout
<< "Square it : " << z1
*z1
<< std::endl
;
23 std::cout
<< "Real part : " << z1
.real() << " = " << real(z1
) << std::endl
;
24 std::cout
<< "Imaginary part : " << z1
.imag() << " = " << imag(z1
) << std::endl
;
26 std::cout
<< "Absolute value : " << abs(z1
) << std::endl
;
27 std::cout
<< "Argument : " << arg(z1
) << std::endl
;
28 std::cout
<< "Norm : " << norm(z1
) << std::endl
;
29 std::cout
<< "Complex conjugate : " << conj(z1
) << std::endl
;
30 std::cout
<< "Projection onto Riemann sphere: " << proj(z1
) << std::endl
;
31 typename
Complex::value_type r
= 1;
32 typename
Complex::value_type theta
= 0.8;
34 std::cout
<< "Polar coordinates (phase = 0) : " << polar(r
) << std::endl
;
35 std::cout
<< "Polar coordinates (phase !=0) : " << polar(r
, theta
) << std::endl
;
37 std::cout
<< "\nElementary special functions:\n";
39 std::cout
<< "exp(z1) = " << exp(z1
) << std::endl
;
41 std::cout
<< "log(z1) = " << log(z1
) << std::endl
;
43 std::cout
<< "log10(z1) = " << log10(z1
) << std::endl
;
45 std::cout
<< "pow(z1, z1) = " << pow(z1
, z1
) << std::endl
;
47 std::cout
<< "Take its square root : " << sqrt(z1
) << std::endl
;
49 std::cout
<< "sin(z1) = " << sin(z1
) << std::endl
;
51 std::cout
<< "cos(z1) = " << cos(z1
) << std::endl
;
53 std::cout
<< "tan(z1) = " << tan(z1
) << std::endl
;
55 std::cout
<< "asin(z1) = " << asin(z1
) << std::endl
;
57 std::cout
<< "acos(z1) = " << acos(z1
) << std::endl
;
59 std::cout
<< "atan(z1) = " << atan(z1
) << std::endl
;
61 std::cout
<< "sinh(z1) = " << sinh(z1
) << std::endl
;
63 std::cout
<< "cosh(z1) = " << cosh(z1
) << std::endl
;
65 std::cout
<< "tanh(z1) = " << tanh(z1
) << std::endl
;
67 std::cout
<< "asinh(z1) = " << asinh(z1
) << std::endl
;
69 std::cout
<< "acosh(z1) = " << acosh(z1
) << std::endl
;
71 std::cout
<< "atanh(z1) = " << atanh(z1
) << std::endl
;
76 std::cout
<< "First, some operations we usually perform with std::complex:\n";
77 complex_number_examples
<std::complex<double>>();
78 std::cout
<< "\nNow the same operations performed using quad precision complex numbers:\n";
79 complex_number_examples
<boost::multiprecision::cpp_complex_quad
>();
89 Print a complex number: (0.000000000000000000000000000000000,1.000000000000000000000000000000000)
90 Square it : -1.000000000000000000000000000000000
91 Real part : 0.000000000000000000000000000000000 = 0.000000000000000000000000000000000
92 Imaginary part : 1.000000000000000000000000000000000 = 1.000000000000000000000000000000000
93 Absolute value : 1.000000000000000000000000000000000
94 Argument : 1.570796326794896619231321691639751
95 Norm : 1.000000000000000000000000000000000
96 Complex conjugate : (0.000000000000000000000000000000000,-1.000000000000000000000000000000000)
97 Projection onto Riemann sphere: (0.000000000000000000000000000000000,1.000000000000000000000000000000000)
98 Polar coordinates (phase = 0) : 1.000000000000000000000000000000000
99 Polar coordinates (phase !=0) : (0.696706709347165389063740022772448,0.717356090899522792567167815703377)
101 Elementary special functions:
102 exp(z1) = (0.540302305868139717400936607442977,0.841470984807896506652502321630299)
103 log(z1) = (0.000000000000000000000000000000000,1.570796326794896619231321691639751)
104 log10(z1) = (0.000000000000000000000000000000000,0.682188176920920673742891812715678)
105 pow(z1, z1) = 0.207879576350761908546955619834979
106 Take its square root : (0.707106781186547524400844362104849,0.707106781186547524400844362104849)
107 sin(z1) = (0.000000000000000000000000000000000,1.175201193643801456882381850595601)
108 cos(z1) = 1.543080634815243778477905620757062
109 tan(z1) = (0.000000000000000000000000000000000,0.761594155955764888119458282604794)
110 asin(z1) = (0.000000000000000000000000000000000,0.881373587019543025232609324979793)
111 acos(z1) = (1.570796326794896619231321691639751,-0.881373587019543025232609324979793)
112 atan(z1) = (0.000000000000000000000000000000000,inf)
113 sinh(z1) = (0.000000000000000000000000000000000,0.841470984807896506652502321630299)
114 cosh(z1) = 0.540302305868139717400936607442977
115 tanh(z1) = (0.000000000000000000000000000000000,1.557407724654902230506974807458360)
116 asinh(z1) = (0.000000000000000000000000000000000,1.570796326794896619231321691639751)
117 acosh(z1) = (0.881373587019543025232609324979792,1.570796326794896619231321691639751)
118 atanh(z1) = (0.000000000000000000000000000000000,0.785398163397448309615660845819876)