]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
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 | |
5 | ||
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. | |
8 | */ | |
9 | ||
10 | //[mpc_eg | |
11 | #include <iostream> | |
12 | #include <complex> | |
13 | #include <boost/multiprecision/mpc.hpp> | |
14 | ||
15 | template<class Complex> | |
16 | void complex_number_examples() | |
17 | { | |
18 | Complex z1{0, 1}; | |
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; | |
25 | using std::abs; | |
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; | |
33 | using std::polar; | |
34 | std::cout << "Polar coordinates (phase = 0) : " << polar(r) << std::endl; | |
35 | std::cout << "Polar coordinates (phase !=0) : " << polar(r, theta) << std::endl; | |
36 | ||
37 | std::cout << "\nElementary special functions:\n"; | |
38 | using std::exp; | |
39 | std::cout << "exp(z1) = " << exp(z1) << std::endl; | |
40 | using std::log; | |
41 | std::cout << "log(z1) = " << log(z1) << std::endl; | |
42 | using std::log10; | |
43 | std::cout << "log10(z1) = " << log10(z1) << std::endl; | |
44 | using std::pow; | |
45 | std::cout << "pow(z1, z1) = " << pow(z1, z1) << std::endl; | |
46 | using std::sqrt; | |
47 | std::cout << "Take its square root : " << sqrt(z1) << std::endl; | |
48 | using std::sin; | |
49 | std::cout << "sin(z1) = " << sin(z1) << std::endl; | |
50 | using std::cos; | |
51 | std::cout << "cos(z1) = " << cos(z1) << std::endl; | |
52 | using std::tan; | |
53 | std::cout << "tan(z1) = " << tan(z1) << std::endl; | |
54 | using std::asin; | |
55 | std::cout << "asin(z1) = " << asin(z1) << std::endl; | |
56 | using std::acos; | |
57 | std::cout << "acos(z1) = " << acos(z1) << std::endl; | |
58 | using std::atan; | |
59 | std::cout << "atan(z1) = " << atan(z1) << std::endl; | |
60 | using std::sinh; | |
61 | std::cout << "sinh(z1) = " << sinh(z1) << std::endl; | |
62 | using std::cosh; | |
63 | std::cout << "cosh(z1) = " << cosh(z1) << std::endl; | |
64 | using std::tanh; | |
65 | std::cout << "tanh(z1) = " << tanh(z1) << std::endl; | |
66 | using std::asinh; | |
67 | std::cout << "asinh(z1) = " << asinh(z1) << std::endl; | |
68 | using std::acosh; | |
69 | std::cout << "acosh(z1) = " << acosh(z1) << std::endl; | |
70 | using std::atanh; | |
71 | std::cout << "atanh(z1) = " << atanh(z1) << std::endl; | |
72 | } | |
73 | ||
74 | int main() | |
75 | { | |
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 the MPC backend:\n"; | |
79 | complex_number_examples<boost::multiprecision::mpc_complex_50>(); | |
80 | ||
81 | return 0; | |
82 | } | |
83 | //] | |
84 | ||
85 | /* | |
86 | ||
87 | //[mpc_out | |
88 | ||
89 | Print a complex number: (0.00000000000000000000000000000000000000000000000000,1.00000000000000000000000000000000000000000000000000) | |
90 | Square it : -1.00000000000000000000000000000000000000000000000000 | |
91 | Real part : 0.00000000000000000000000000000000000000000000000000 = 0.00000000000000000000000000000000000000000000000000 | |
92 | Imaginary part : 1.00000000000000000000000000000000000000000000000000 = 1.00000000000000000000000000000000000000000000000000 | |
93 | Absolute value : 1.00000000000000000000000000000000000000000000000000 | |
94 | Argument : 1.57079632679489661923132169163975144209858469968755 | |
95 | Norm : 1.00000000000000000000000000000000000000000000000000 | |
96 | Complex conjugate : (0.00000000000000000000000000000000000000000000000000,-1.00000000000000000000000000000000000000000000000000) | |
97 | Projection onto Riemann sphere: (0.00000000000000000000000000000000000000000000000000,1.00000000000000000000000000000000000000000000000000) | |
98 | Polar coordinates (phase = 0) : 1.00000000000000000000000000000000000000000000000000 | |
99 | Polar coordinates (phase !=0) : (0.69670670934716538906374002277244853473117519431538,0.71735609089952279256716781570337728075604730751255) | |
100 | ||
101 | Elementary special functions: | |
102 | exp(z1) = (0.54030230586813971740093660744297660373231042061792,0.84147098480789650665250232163029899962256306079837) | |
103 | log(z1) = (0.00000000000000000000000000000000000000000000000000,1.57079632679489661923132169163975144209858469968755) | |
104 | log10(z1) = (0.00000000000000000000000000000000000000000000000000,0.68218817692092067374289181271567788510506374186196) | |
105 | pow(z1, z1) = 0.20787957635076190854695561983497877003387784163177 | |
106 | Take its square root : (0.70710678118654752440084436210484903928483593768847,0.70710678118654752440084436210484903928483593768847) | |
107 | sin(z1) = (0.00000000000000000000000000000000000000000000000000,1.17520119364380145688238185059560081515571798133410) | |
108 | cos(z1) = 1.54308063481524377847790562075706168260152911236587 | |
109 | tan(z1) = (0.00000000000000000000000000000000000000000000000000,0.76159415595576488811945828260479359041276859725794) | |
110 | asin(z1) = (0.00000000000000000000000000000000000000000000000000,0.88137358701954302523260932497979230902816032826163) | |
111 | acos(z1) = (1.57079632679489661923132169163975144209858469968755,-0.88137358701954302523260932497979230902816032826163) | |
112 | atan(z1) = (0.00000000000000000000000000000000000000000000000000,inf) | |
113 | sinh(z1) = (0.00000000000000000000000000000000000000000000000000,0.84147098480789650665250232163029899962256306079837) | |
114 | cosh(z1) = 0.54030230586813971740093660744297660373231042061792 | |
115 | tanh(z1) = (0.00000000000000000000000000000000000000000000000000,1.55740772465490223050697480745836017308725077238152) | |
116 | asinh(z1) = (0.00000000000000000000000000000000000000000000000000,1.57079632679489661923132169163975144209858469968755) | |
117 | acosh(z1) = (0.88137358701954302523260932497979230902816032826163,1.57079632679489661923132169163975144209858469968755) | |
118 | atanh(z1) = (0.00000000000000000000000000000000000000000000000000,0.78539816339744830961566084581987572104929234984378) | |
119 | ||
120 | //] | |
121 | */ |