]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multiprecision/example/mpc_examples.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / multiprecision / example / mpc_examples.cpp
CommitLineData
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.
7In 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
15template<class Complex>
16void 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
74int 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
89Print a complex number: (0.00000000000000000000000000000000000000000000000000,1.00000000000000000000000000000000000000000000000000)
90Square it : -1.00000000000000000000000000000000000000000000000000
91Real part : 0.00000000000000000000000000000000000000000000000000 = 0.00000000000000000000000000000000000000000000000000
92Imaginary part : 1.00000000000000000000000000000000000000000000000000 = 1.00000000000000000000000000000000000000000000000000
93Absolute value : 1.00000000000000000000000000000000000000000000000000
94Argument : 1.57079632679489661923132169163975144209858469968755
95Norm : 1.00000000000000000000000000000000000000000000000000
96Complex conjugate : (0.00000000000000000000000000000000000000000000000000,-1.00000000000000000000000000000000000000000000000000)
97Projection onto Riemann sphere: (0.00000000000000000000000000000000000000000000000000,1.00000000000000000000000000000000000000000000000000)
98Polar coordinates (phase = 0) : 1.00000000000000000000000000000000000000000000000000
99Polar coordinates (phase !=0) : (0.69670670934716538906374002277244853473117519431538,0.71735609089952279256716781570337728075604730751255)
100
101Elementary special functions:
102exp(z1) = (0.54030230586813971740093660744297660373231042061792,0.84147098480789650665250232163029899962256306079837)
103log(z1) = (0.00000000000000000000000000000000000000000000000000,1.57079632679489661923132169163975144209858469968755)
104log10(z1) = (0.00000000000000000000000000000000000000000000000000,0.68218817692092067374289181271567788510506374186196)
105pow(z1, z1) = 0.20787957635076190854695561983497877003387784163177
106Take its square root : (0.70710678118654752440084436210484903928483593768847,0.70710678118654752440084436210484903928483593768847)
107sin(z1) = (0.00000000000000000000000000000000000000000000000000,1.17520119364380145688238185059560081515571798133410)
108cos(z1) = 1.54308063481524377847790562075706168260152911236587
109tan(z1) = (0.00000000000000000000000000000000000000000000000000,0.76159415595576488811945828260479359041276859725794)
110asin(z1) = (0.00000000000000000000000000000000000000000000000000,0.88137358701954302523260932497979230902816032826163)
111acos(z1) = (1.57079632679489661923132169163975144209858469968755,-0.88137358701954302523260932497979230902816032826163)
112atan(z1) = (0.00000000000000000000000000000000000000000000000000,inf)
113sinh(z1) = (0.00000000000000000000000000000000000000000000000000,0.84147098480789650665250232163029899962256306079837)
114cosh(z1) = 0.54030230586813971740093660744297660373231042061792
115tanh(z1) = (0.00000000000000000000000000000000000000000000000000,1.55740772465490223050697480745836017308725077238152)
116asinh(z1) = (0.00000000000000000000000000000000000000000000000000,1.57079632679489661923132169163975144209858469968755)
117acosh(z1) = (0.88137358701954302523260932497979230902816032826163,1.57079632679489661923132169163975144209858469968755)
118atanh(z1) = (0.00000000000000000000000000000000000000000000000000,0.78539816339744830961566084581987572104929234984378)
119
120//]
121*/