30#include "lx_complex.hpp"
31#include "lx_cinterval.hpp"
55 std::string & operator >> (std::string& s, lx_complex& a)
noexcept
63 std::cout <<
"Halo 1" << std::endl;
64 s = skipwhitespacessinglechar (s,
'(');
65 std::cout <<
"s = " << s << std::endl;
67 std::cout <<
"i = " << i << std::endl;
69 std::cout <<
"su = " << su << std::endl;
73 s = skipwhitespacessinglechar (s,
',');
74 std::cout <<
"s = " << s << std::endl;
81 void operator >> (
const std::string &s, lx_complex &a)
noexcept
88 void operator >> (
const char *s, lx_complex& a)
noexcept
94 lx_real
abs (
const lx_complex& a)
noexcept
96 lx_real abs2 (
const lx_complex& a)
noexcept
97 {
return a.re*a.re + a.im*a.im; }
103lx_complex
sqr(
const lx_complex& z)
noexcept {
return (z*z); }
104lx_complex
sqrt(
const lx_complex& z)
noexcept
105{
return mid(
sqrt(lx_cinterval(z))); }
107lx_complex
sqrt(
const lx_complex& z,
int n)
noexcept
108{
return mid(
sqrt(lx_cinterval(z),n) ); }
110lx_complex
exp(
const lx_complex& z)
noexcept
111{
return mid(
exp(lx_cinterval(z))); }
113lx_complex
exp2(
const lx_complex& z)
noexcept
114{
return mid(
exp2(lx_cinterval(z))); }
116lx_complex
exp10(
const lx_complex& z)
noexcept
117{
return mid(
exp10(lx_cinterval(z))); }
119lx_complex
sin(
const lx_complex& z)
noexcept
120{
return mid(
sin(lx_cinterval(z))); }
122lx_complex
cos(
const lx_complex& z)
noexcept
123{
return mid(
cos(lx_cinterval(z))); }
125lx_complex
tan(
const lx_complex& z)
noexcept
126{
return mid(
tan(lx_cinterval(z))); }
128lx_complex
cot(
const lx_complex& z)
noexcept
129{
return mid(
cot(lx_cinterval(z))); }
131lx_complex
asin(
const lx_complex& z)
noexcept
132{
return mid(
asin(lx_cinterval(z))); }
134lx_complex
acos(
const lx_complex& z)
noexcept
135{
return mid(
acos(lx_cinterval(z))); }
137lx_complex
atan(
const lx_complex& z)
noexcept
138{
return mid(
atan(lx_cinterval(z))); }
140lx_complex
acot(
const lx_complex& z)
noexcept
141{
return mid(
acot(lx_cinterval(z))); }
143lx_complex
sinh(
const lx_complex& z)
noexcept
144{
return mid(
sinh(lx_cinterval(z))); }
146lx_complex
cosh(
const lx_complex& z)
noexcept
147{
return mid(
cosh(lx_cinterval(z))); }
149lx_complex
tanh(
const lx_complex& z)
noexcept
150{
return mid(
tanh(lx_cinterval(z))); }
152lx_complex
coth(
const lx_complex& z)
noexcept
153{
return mid(
coth(lx_cinterval(z))); }
155lx_complex
asinh(
const lx_complex& z)
noexcept
156{
return mid(
asinh(lx_cinterval(z))); }
158lx_complex
acosh(
const lx_complex& z)
noexcept
159{
return mid(
acosh(lx_cinterval(z))); }
161lx_complex
atanh(
const lx_complex& z)
noexcept
162{
return mid(
atanh(lx_cinterval(z))); }
164lx_complex
acoth(
const lx_complex& z)
noexcept
165{
return mid(
acoth(lx_cinterval(z))); }
168std::list<lx_complex>
sqrt_all(
const lx_complex& c )
173 std::list<lx_complex> res;
175 res.push_back( -lc );
180lx_real
arg(
const lx_complex& z)
noexcept
181{
return mid(
arg(lx_cinterval(z))); }
183lx_real
Arg(
const lx_complex& z)
noexcept
184{
return mid(
Arg(lx_cinterval(z))); }
186std::list<lx_complex>
sqrt_all(
const lx_complex& z,
int n )
196 std::list<lx_complex> res;
208 else if( n == 2 )
return sqrt_all( z );
212 arg_z =
arg( z ), root_abs_z =
sqrt(
abs( z ), n );
214 for(
int k = 0; k < n; k++)
216 lx_real arg_k = ( arg_z + 2 * k *
Pi_lx_real() ) / n;
217 res.push_back( lx_complex( root_abs_z *
cos( arg_k ),
218 root_abs_z *
sin( arg_k ) ) );
226lx_complex
ln(
const lx_complex& z)
noexcept
227{
return mid(
ln(lx_cinterval(z))); }
229lx_complex
log2(
const lx_complex& z)
noexcept
230{
return mid(
log2(lx_cinterval(z))); }
231lx_complex
log10(
const lx_complex& z)
noexcept
232{
return mid(
log10(lx_cinterval(z))); }
239 if( n == 1 )
return z;
241 if( n == -1 )
return 1 / z;
243 if( n == 2 )
return sqr(z);
246 lx_real abs_z =
abs(z);
247 if( ((n < 0) && (abs_z == 0.0)) || !(
Is_Integer(n)))
249 cxscthrow (STD_FKT_OUT_OF_DEF(
250 "lx_complex power_fast(const lx_complex& z, const real& n ); z = 0 or n is not integer."));
255 lx_real arg_z =
arg(z);
256 lx_real abs_z_n =
exp( n *
ln( abs_z ) );
258 return lx_complex( abs_z_n *
cos( n * arg_z ),
259 abs_z_n *
sin( n * arg_z ) );
264lx_complex
power(
const lx_complex& x,
const real& n)
noexcept
268 cxscthrow(STD_FKT_OUT_OF_DEF(
269 "lx_complex power(const lx_complex& z, const real& n); n is not integer."));
271 real zhi(2.0), N(n), r;
274 lx_complex y, neu, X(x);
278 if (N == 0.0) y = one;
283 if (N == 2) y =
sqr(x);
298 dbl = _double(N/zhi);
312lx_complex
pow(
const lx_complex& z,
const lx_real& p)
noexcept
313{
return mid(
pow( lx_cinterval(z) , lx_interval(p) ) ); }
315lx_complex
pow(
const lx_complex& z,
const lx_complex& p)
noexcept
316{
return mid(
pow( lx_cinterval(z) , lx_cinterval(p) ) ); }
330lx_complex
expm1(
const lx_complex& z)
noexcept
331{
return mid(
expm1(lx_cinterval(z))); }
333lx_complex
lnp1(
const lx_complex& z)
noexcept
334{
return mid(
lnp1(lx_cinterval(z))); }
complex & operator=(const real &r) noexcept
Implementation of standard assigning operator.
The Multiple-Precision Data Type l_complex.
l_complex & operator=(const l_real &lr) noexcept
Implementation of standard assigning operator.
The Multiple-Precision Data Type l_real.
The namespace cxsc, providing all functionality of the class library C-XSC.
cinterval sqrtp1m1(const cinterval &z) noexcept
Calculates .
cinterval exp2(const cinterval &z) noexcept
Calculates .
cinterval sqrt1mx2(const cinterval &z) noexcept
Calculates .
cinterval asinh(const cinterval &z) noexcept
Calculates .
cinterval coth(const cinterval &z) noexcept
Calculates .
cinterval log2(const cinterval &z) noexcept
Calculates .
cinterval power(const cinterval &z, int n) noexcept
Calculates .
cinterval log10(const cinterval &z) noexcept
Calculates .
cinterval ln(const cinterval &z) noexcept
Calculates .
bool Is_Integer(const real &x)
Returns 1 if x is an integer value and if .
cinterval pow(const cinterval &z, const interval &p) noexcept
Calculates .
cinterval sinh(const cinterval &z) noexcept
Calculates .
cinterval asin(const cinterval &z) noexcept
Calculates .
cinterval tan(const cinterval &z) noexcept
Calculates .
cinterval exp10(const cinterval &z) noexcept
Calculates .
interval arg(const cinterval &z) noexcept
Calculates .
std::list< cinterval > sqrt_all(const cinterval &z)
Calculates and returns all possible solutions.
cinterval acos(const cinterval &z) noexcept
Calculates .
cinterval sqrtx2m1(const cinterval &z) noexcept
Calculates .
cinterval acosh(const cinterval &z) noexcept
Calculates .
cinterval cosh(const cinterval &z) noexcept
Calculates .
cinterval cos(const cinterval &z) noexcept
Calculates .
cinterval sqrt1px2(const cinterval &z) noexcept
Calculates .
cinterval exp(const cinterval &z) noexcept
Calculates .
cinterval tanh(const cinterval &z) noexcept
Calculates .
cinterval expm1(const cinterval &z) noexcept
Calculates .
cinterval cot(const cinterval &z) noexcept
Calculates .
ivector abs(const cimatrix_subv &mv) noexcept
Returns the absolute value of the matrix.
cinterval sqrt(const cinterval &z) noexcept
Calculates .
cinterval power_fast(const cinterval &z, int n) noexcept
Calculates .
cinterval acot(const cinterval &z) noexcept
Calculates .
cinterval sqr(const cinterval &z) noexcept
Calculates .
cinterval lnp1(const cinterval &z) noexcept
Calculates .
cvector mid(const cimatrix_subv &mv) noexcept
Returns the middle of the matrix.
cinterval atan(const cinterval &z) noexcept
Calculates .
cinterval atanh(const cinterval &z) noexcept
Calculates .
interval Arg(const cinterval &z) noexcept
Calculates .
cinterval acoth(const cinterval &z) noexcept
Calculates .
interval sqrtx2y2(const interval &x, const interval &y) noexcept
Calculates .
lx_real Pi_lx_real() noexcept
lx_real approximation for
cinterval sin(const cinterval &z) noexcept
Calculates .