⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 complex.h

📁 su 的源代码库
💻 H
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */// Complex.h - C++ include file for complex arithmetic#ifndef COMPLEX_H#define COMPLEX_H#include <math.h>class complex{public:	float r;	float i;	inline complex() {r=0.0; i=0.0;}	inline complex(float re, float im=0.0) {r=re; i=im;}	inline float real(complex a);	inline float imag(complex a);	inline void operator+= (complex a);	inline void operator+= (float a);	inline void operator-= (complex a);	inline void operator-= (float a);	inline void operator*= (complex a);	inline void operator*= (float a);	inline void operator/= (complex a);	inline void operator/= (float a);};// inline membersinline float complex::real(complex a) { return a.r; }inline float complex::imag(complex a) { return a.i; }inline void complex::operator+= (complex a){	r += a.r; i += a.i;}inline void complex::operator+= (float a){	r += a;}inline void complex::operator-= (complex a){	r -= a.r; i -= a.i;}inline void complex::operator-= (float a){	r -= a;}inline void complex::operator*= (complex a){	float ar=a.r,ai=a.i,tr=r*ar-i*ai;	i = r*ai+i*ar; r = tr;}inline void complex::operator*= (float a){	r *= a; i *= a;}inline void complex::operator/= (complex a){	float ar=a.r,ai=a.i,scale=1.0/(ar*ar+ai*ai);	float tr = (r*ar+i*ai)*scale;	i = (i*ar-r*ai)*scale; r = tr;}inline void complex::operator/= (float a){	float scale=1.0/a;	r *= scale; i *= scale;}// inline functionsinline int operator== (complex a, complex b){	return a.r==b.r && a.i==b.i;}inline int operator== (complex a, float b){	return a.r==b && a.i==0.0;}inline int operator== (float a, complex b){	return a==b.r && b.i==0.0;}inline int operator!= (complex a, complex b){	return a.r!=b.r || a.i!=b.i;}inline int operator!= (complex a, float b){	return a.r!=b || a.i!=0.0;}inline int operator!= (float a, complex b){	return a!=b.r || b.i!=0.0;}inline complex operator- (complex a){	return complex(-a.r,-a.i);}inline complex conjg (complex a){	return complex(a.r,-a.i);}inline float abs (complex a){	return sqrt(a.r*a.r+a.i*a.i);}inline complex operator+ (complex a, complex b){	return complex(a.r+b.r,a.i+b.i);}inline complex operator+ (complex a, float b){	return complex(a.r+b,a.i);}inline complex operator+ (float a, complex b){	return complex(a+b.r,b.i);}inline complex operator- (complex a, complex b){	return complex(a.r-b.r,a.i-b.i);}inline complex operator- (complex a, float b){	return complex(a.r-b,a.i);}inline complex operator- (float a, complex b){	return complex(a-b.r,-b.i);}inline complex operator* (complex a, complex b){	float ar=a.r,ai=a.i,br=b.r,bi=b.i;	return complex(ar*br-ai*bi,ar*bi+ai*br);}inline complex operator* (complex a, float b){	return complex(a.r*b,a.i*b);}inline complex operator* (float a, complex b){	return complex(a*b.r,a*b.i);}inline complex operator/ (complex a, complex b){	float ar=a.r,ai=a.i,br=b.r,bi=b.i,scale=1.0/(br*br+bi*bi);	return complex((ar*br+ai*bi)*scale,(ai*br-ar*bi)*scale); }inline complex operator/ (complex a, float b){	float scale=1.0/b;	return complex(a.r*scale,a.i*scale); }inline complex operator/ (float a, complex b){	float br=b.r,bi=b.i,scale=a/(br*br+bi*bi);	return complex(br*scale,-bi*scale); }// inline functions with destination argument (ugly, but efficient)inline void cmplx(float a, float b, complex& c){	c.r = a; c.i = b;}inline void conjg(complex& a, complex& b){	b.r = a.r; b.i = -a.i;}inline void neg(complex& a, complex& b){	b.r = -a.r; b.i = -a.i;}inline void add(complex& a, complex& b, complex& c){	c.r = a.r+b.r; c.i = a.i+b.i;}inline void add(float a, complex& b, complex& c){	c.r = a+b.r; c.i = b.i;}inline void add(complex& a, float b, complex& c){	c.r = a.r+b; c.i = a.i;}inline void sub(complex& a, complex& b, complex& c){	c.r = a.r-b.r; c.i = a.i-b.i;}inline void sub(float a, complex& b, complex& c){	c.r = a-b.r; c.i = -b.i;}inline void sub(complex& a, float b, complex& c){	c.r = a.r-b; c.i = a.i;}inline void mul(complex& a, complex& b, complex& c){	float ar=a.r,ai=a.i,br=b.r,bi=b.i;	c.r = ar*br-ai*bi; c.i = ar*bi+ai*br;}inline void mul(float a, complex& b, complex& c){	c.r = a*b.r; c.i = a*b.i;}inline void mul(complex& a, float b, complex& c){	c.r = a.r*b; c.i = a.i*b;}inline void div(complex& a, complex& b, complex& c){	float ar=a.r,ai=a.i,br=b.r,bi=b.i,scale=1.0/(br*br+bi*bi);	c.r = (ar*br+ai*bi)*scale; c.i = (ai*br-ar*bi)*scale; }inline void div(float a, complex& b, complex& c){	float br=b.r,bi=b.i,scale=a/(br*br+bi*bi);	c.r = br*scale; c.i = -bi*scale; }inline void div(complex& a, float b, complex& c){	float scale=1.0/b;	c.r = a.r*scale; c.i = a.i*scale; }// non-inline function prototypescomplex sqrt(complex a);complex cos(complex a);complex sin(complex a);complex cosh(complex a);complex sinh(complex a);complex exp(complex a);complex log(complex a);complex pow(complex a, int p);complex pow(complex a, double p);complex pow(double a, complex p);complex pow(complex a, complex p);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -