📄 complex.c
字号:
/***
*Complex.c - The library function of complex operation.
*
*Purpose:
* This file offer the complex library operation.
* Add, Sub, Mul, Div, Expj, etc...
*
*Copyright:
* Modified by Jianlan Liu
* 2006-01-08 18:02
* All rights reserved.
*
*Environment:
* Editor - SourceInsight 3.5
* Edit font - Consolas - 12
* Tab width - 4
* Compiler - Turbo C 2.0
****/
#include <math.h>
#include "Common.h"
#include "Complex.h"
/***
* ...
* (a1+j*b1) + (a2+j*b2) = (a1+a2) + j*(b1+b2)
*******************************************************************************/
void Cplx_Add(COMPLEX *dst, COMPLEX *src)
{
dst->real += src->real;
dst->img += src->img;
}
/***
* ...
* (a1+j*b1) - (a2+j*b2) = (a1-a2) + j*(b1-b2)
*******************************************************************************/
void Cplx_Sud(COMPLEX *dst, COMPLEX *src)
{
dst->real -= src->real;
dst->img -= src->img;
}
/***
* ...
* (a1+j*b1) * (a2+j*b2) = (a1*a2-b1*b2) + j*(a1*b2+a2*b1)
*******************************************************************************/
void Cplx_Mul(COMPLEX *dst, COMPLEX *src)
{
double real;
double img;
real = dst->real*src->real - dst->img*src->img;
img = dst->real*src->img + src->real*dst->img;
dst->real = real;
dst->img = img;
}
/***
* ...
* (a1+j*b1) / (a2+j*b2) = [(a1*a2+b1*b2) + j*(a2*b1-a1*b2)] / (a2*a2-b2*b2)
* = (a1*a2+b1*b2)/(a2*a2-b2*b2) + j*(a2*b1-a1*b2)/(a2*a2-b2*b2)
* 此处, 为了节省开辟堆栈的时间, 采用了全局变量, 为不可重入函数\
* 所以在调用的时候需保证不会有中断函数调用它
*******************************************************************************/
void Cplx_Div(COMPLEX *dst, COMPLEX *src)
{
double sq_sub_ab; /* a2*a2 - b2*b2 */
double real;
double img;
sq_sub_ab = src->real*src->real - src->img*src->img;
if (sq_sub_ab == 0.0L) {
/* The illegal data, 采集到非法数据,忽略,当作除一数据1.0L */
}
else {
real = (dst->real*src->real + dst->img*src->img) / sq_sub_ab;
img = (src->real*dst->img - dst->real*src->img) / sq_sub_ab;
dst->real = real;
dst->img = img;
}
}
/***
* ...
* (a1+j*b1) / a2 = (a1/a2) + j*(b1/a2)
* 此处, 为了节省开辟堆栈的时间, 采用了全局变量, 为不可重入函数\
* 所以在调用的时候需保证不会有中断函数调用它
*******************************************************************************/
void Cplx_Div2(COMPLEX *dst, double src_real)
{
if (src_real == 0) {
/* The illegal data, 采集到非法数据,忽略,当作除一数据1.0L */
}
else {
dst->real /= src_real;
dst->img /= src_real;
}
}
/***
* ...
* e^(b*j) = cos(b) + j*sin(b)
*******************************************************************************/
void Cplx_Expj(COMPLEX *dst, double img_b)
{
dst->real = cos(img_b);
dst->img = sin(img_b);
}
/***
* ...
* |a+j*b| = sqrt(a*a + b*b)
*******************************************************************************/
double Cplx_Mod(COMPLEX *src)
{
return sqrt(src->real*src->real + src->img*src->img);
}
/***
* ...
*******************************************************************************/
void Cplx_Eva(COMPLEX *dst, COMPLEX *src)
{
dst->real = src->real;
dst->img = src->img;
}
/***
* ...
*******************************************************************************/
void Cplx_Eva2(COMPLEX *dst, double real, double img)
{
dst->real = real;
dst->img = img;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -