32#include <casacore/casa/aips.h>
33#include <casacore/casa/BasicSL/Complexfwd.h>
34#include <casacore/casa/complex.h>
162void setNaN(Complex& val);
164void setInf(Complex& val);
174inline Bool operator>= (
const Complex& left,
const Complex& right)
175 {
return left==right ?
True :
norm(left) >=
norm(right); }
176inline Bool operator> (
const Complex& left,
const Complex& right)
178inline Bool operator<= (
const Complex& left,
const Complex& right)
179 {
return left==right ?
True :
norm(left) <=
norm(right); }
180inline Bool operator< (
const Complex& left,
const Complex& right)
190void setNaN(DComplex& val);
192void setInf(DComplex& val);
200inline Bool operator>= (
const DComplex& left,
const DComplex& right)
202inline Bool operator> (
const DComplex& left,
const DComplex& right)
204inline Bool operator<= (
const DComplex& left,
const DComplex& right)
206inline Bool operator< (
const DComplex& left,
const DComplex& right)
216inline Double fabs(
const DComplex &val) {
return std::abs(val); }
217inline Float fabs(
const Complex &val) {
return std::abs(val); }
219inline DComplex
square(
const DComplex &val) {
return val*val; }
220inline Complex
square(
const Complex &val) {
return val*val; }
222inline DComplex
cube(
const DComplex &val) {
return val*val*val; }
223inline Complex
cube(
const Complex &val) {
return val*val*val; }
229inline DComplex
operator+(
const DComplex& d,
const Complex& c) {
230 return (DComplex)c + d;
233inline DComplex
operator+(
const Complex& c,
const DComplex& d) {
234 return (DComplex)c + d;
237inline DComplex
operator-(
const DComplex& d,
const Complex& c) {
238 return d - (DComplex)c;
241inline DComplex
operator-(
const Complex& c,
const DComplex& d) {
242 return (DComplex)c - d;
266Bool near(
const Complex &val1,
const Complex &val2,
Double tol=1.0e-5);
272 {
return near(val1, val2, tol); }
273inline Bool allNear(
const DComplex &val1,
const DComplex &val2,
275 {
return near(val1, val2, tol); }
278 {
return nearAbs(val1, val2, tol); }
281 {
return nearAbs(val1, val2, tol); }
288inline Complex
max(
const Complex &x,
const Complex &y)
289 {
return x >= y ? x : y; }
290inline DComplex
max(
const DComplex &x,
const DComplex &y)
291 {
return x >= y ? x : y; }
293inline Complex
min(
const Complex &x,
const Complex &y)
294 {
return x <= y ? x : y; }
295inline DComplex
min(
const DComplex &x,
const DComplex &y)
296 {
return x <= y ? x : y; }
298inline Complex
floor(
const Complex &x) {
299 return Complex(std::floor(x.real()), std::floor(x.imag())); }
300inline DComplex
floor(
const DComplex &x) {
301 return DComplex(std::floor(x.real()), std::floor(x.imag())); }
303inline Complex
ceil(
const Complex &x) {
304 return Complex(std::ceil(x.real()), std::ceil(x.imag())); }
305inline DComplex
ceil(
const DComplex &x) {
306 return DComplex(std::ceil(x.real()), std::ceil(x.imag())); }
313DComplex
fmod(
const DComplex &in,
const DComplex &f);
314Complex
fmod(
const Complex &in,
const Complex &f);
322DComplex
atan(
const DComplex &in);
323Complex
atan(
const Complex &in);
324DComplex
asin(
const DComplex &in);
325Complex
asin(
const Complex &in);
326DComplex
acos(
const DComplex &in);
327Complex
acos(
const Complex &in);
328DComplex
atan2(
const DComplex &in,
const DComplex &t2);
329Complex
atan2(
const Complex &in,
const Complex &t2);
338DComplex erf(
const DComplex &in);
339Complex
erf(
const Complex &in);
340DComplex erfc(
const DComplex &in);
341Complex
erfc(
const Complex &in);
351 inline float conj(
float x) {
return x; }
352 inline double conj(
double x) {
return x; }
353 using casacore::operator>;
354 using casacore::operator>=;
355 using casacore::operator<;
356 using casacore::operator<=;
DComplex fmod(const DComplex &in, const DComplex &f)
fmod
Complex max(const Complex &x, const Complex &y)
Max and min, floor and ceil functions.
Double fabs(const DComplex &val)
Additional complex mathematical functions.
Bool isNaN(const DComplex &val)
DComplex NaN and Infinity.
Bool isNaN(const Complex &val)
Complex NaN and Infinity.
DComplex erf(const DComplex &in)
Error function.
DComplex atan(const DComplex &in)
Inverse trigonometry.
Bool near(const Complex &val1, const Complex &val2, Double tol=1.0e-5)
The near functions.
this file contains all the compiler specific defines
LatticeExprNode isNaN(const LatticeExprNode &expr)
Test if a value is a NaN.
LatticeExprNode asin(const LatticeExprNode &expr)
LatticeExprNode fmod(const LatticeExprNode &left, const LatticeExprNode &right)
LatticeExprNode acos(const LatticeExprNode &expr)
LatticeExprNode max(const LatticeExprNode &left, const LatticeExprNode &right)
TableExprNode isFinite(const TableExprNode &node)
Function to test if a scalar or array is finite.
LatticeExprNode atan(const LatticeExprNode &expr)
bool allNearAbs(const C1 &l, const C2 &r, U tolerance)
Test if all elements of the containers are absolutely near each other.
TableExprNode nearAbs(const TableExprNode &left, const TableExprNode &right)
TableExprNode isInf(const TableExprNode &node)
T norm(const TableVector< T > &tv)
LatticeExprNode atan2(const LatticeExprNode &left, const LatticeExprNode &right)
Numerical 2-argument functions.
bool Bool
Define the standard types used by Casacore.
bool allNear(const C1 &l, const C2 &r, U tolerance)
Test if all elements of the containers are relatively near each other.
Bool near(const GaussianBeam &left, const GaussianBeam &other, const Double relWidthTol, const Quantity &absPaTol)
Define real & complex conjugation for non-complex types and put comparisons into std namespace.
DComplex asin(const DComplex &in)
Complex cube(const Complex &val)
Complex operator*(const Complex &val, Double f)
QMath and scimath need these operators * and /.
DComplex erfc(const DComplex &in)
DComplex operator+(const Complex &c, const DComplex &d)
DComplex atan2(const DComplex &in, const DComplex &t2)
DComplex operator+(const DComplex &d, const Complex &c)
ArrayMath::pow needs this pow function.
DComplex min(const DComplex &x, const DComplex &y)
Complex operator/(Int f, const Complex &val)
DComplex cube(const DComplex &val)
Complex operator*(const Complex &val, Int f)
These operators are useful, otherwise both Float and Double are applicable for Ints.
Bool isFinite(const DComplex &val)
Complex min(const Complex &x, const Complex &y)
Bool allNear(const Complex &val1, const Complex &val2, Double tol=1.0e-5)
Bool isInf(const Complex &val)
Complex atan(const Complex &in)
Bool nearAbs(const DComplex &val1, const DComplex &val2, Double tol=1.0e-13)
Complex operator/(const Complex &val, Double f)
DComplex ceil(const DComplex &x)
void setNaN(DComplex &val)
DComplex floor(const DComplex &x)
Float fabs(const Complex &val)
Bool isFinite(const Complex &val)
void setInf(DComplex &val)
Complex fmod(const Complex &in, const Complex &f)
Complex atan2(const Complex &in, const Complex &t2)
Complex erfc(const Complex &in)
Bool isInf(const DComplex &val)
DComplex operator-(const DComplex &d, const Complex &c)
Complex ceil(const Complex &x)
Bool allNearAbs(const DComplex &val1, const DComplex &val2, Double tol=1.0e-13)
Bool nearAbs(const Complex &val1, const Complex &val2, Double tol=1.0e-5)
Bool allNear(const DComplex &val1, const DComplex &val2, Double tol=1.0e-13)
DComplex acos(const DComplex &in)
void setInf(Complex &val)
DComplex operator-(const Complex &c, const DComplex &d)
void setNaN(Complex &val)
Complex operator*(Int f, const Complex &val)
Complex operator/(Double f, const Complex &val)
Complex acos(const Complex &in)
DComplex square(const DComplex &val)
DComplex max(const DComplex &x, const DComplex &y)
Complex floor(const Complex &x)
Bool allNearAbs(const Complex &val1, const Complex &val2, Double tol=1.0e-5)
Complex operator/(const Complex &val, Int f)
Bool near(const DComplex &val1, const DComplex &val2, Double tol=1.0e-13)
Complex asin(const Complex &in)
Complex operator*(Double f, const Complex &val)
Complex erf(const Complex &in)
Complex square(const Complex &val)