build: add the SIBO SDK
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
/* Release 3.10 */
|
||||
/*-------------------------------------------------------------------------*
|
||||
* *
|
||||
* COMPLEX.C - complex number class implementation. *
|
||||
* *
|
||||
* COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
|
||||
* All Rights Reserved *
|
||||
* *
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
#include <clib.h>
|
||||
#include <complex.hpp>
|
||||
|
||||
#pragma module(init_prio=>22)
|
||||
|
||||
double norm(const complex& c) {
|
||||
|
||||
double r, i;
|
||||
|
||||
r=real(c);
|
||||
i=imag(c);
|
||||
return r*r + i*i;
|
||||
}
|
||||
|
||||
double arg(const complex& c) {
|
||||
|
||||
return atan2(imag(c), real(c));
|
||||
}
|
||||
|
||||
complex operator*(const complex& c1, const complex& c2) {
|
||||
|
||||
double ires, rres;
|
||||
double r1, r2, i1, i2;
|
||||
|
||||
r1=real(c1);
|
||||
i1=imag(c1);
|
||||
r2=real(c2);
|
||||
i2=imag(c2);
|
||||
rres = r1*r2 - i1*i2;
|
||||
ires = r1*i2 + r2*i1;
|
||||
return complex(rres, ires);
|
||||
}
|
||||
|
||||
complex operator/(const complex& c1, const complex& c2) {
|
||||
|
||||
double ires, rres;
|
||||
double r1, r2, i1, i2;
|
||||
|
||||
r1=real(c1);
|
||||
i1=imag(c1);
|
||||
r2=real(c2);
|
||||
i2=imag(c2);
|
||||
|
||||
rres=(i1*i2+r1*r2)/(r2*r2+i2*i2);
|
||||
ires=(r2*i1-r1*i2)/(r2*r2+i2*i2);
|
||||
|
||||
return complex(rres, ires);
|
||||
}
|
||||
|
||||
const complex& complex::operator*=(const complex& c2) {
|
||||
|
||||
double ires, rres;
|
||||
double r2, i2;
|
||||
|
||||
r2=real(c2);
|
||||
i2=imag(c2);
|
||||
rres = re*r2 - im*i2;
|
||||
ires = re*i2 + r2*im;
|
||||
re=rres;
|
||||
im=ires;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const complex& complex::operator/=(const complex& c2) {
|
||||
|
||||
double ires, rres;
|
||||
double r2, i2;
|
||||
|
||||
r2=real(c2);
|
||||
i2=imag(c2);
|
||||
|
||||
ires=(im*r2 - i2*re)/(i2*i2 + r2*r2);
|
||||
rres=(im-r2*ires)/i2;
|
||||
re=rres;
|
||||
im=ires;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
double abs(const complex& c) {
|
||||
|
||||
double i, r;
|
||||
|
||||
i=imag(c);
|
||||
r=real(c);
|
||||
return sqrt(r*r + i*i);
|
||||
}
|
||||
|
||||
complex acos(const complex& c) {
|
||||
|
||||
complex r;
|
||||
|
||||
r=sqrt(1 - c*c);
|
||||
r=complex(-imag(r), real(r) );
|
||||
r=log(c + r);
|
||||
return complex(imag(r), -real(r));
|
||||
}
|
||||
|
||||
complex asin(const complex& c) {
|
||||
|
||||
complex r;
|
||||
|
||||
r=sqrt(1 - c*c);
|
||||
r=log(complex(-imag(r), real(r)) + r);
|
||||
return complex(imag(r), -real(r));
|
||||
}
|
||||
|
||||
complex atan(const complex& c) {
|
||||
|
||||
complex r, t;
|
||||
|
||||
t=complex(-imag(c), real(c));
|
||||
r=log((1.0+t)/(1.0-t))/2.0;
|
||||
return complex(imag(r), -real(r));
|
||||
}
|
||||
|
||||
complex cos(const complex& c) {
|
||||
|
||||
complex t;
|
||||
|
||||
t=complex(-imag(c), real(c));
|
||||
return (exp(t) + exp(-t))/2.0;
|
||||
}
|
||||
|
||||
|
||||
complex cosh(const complex& c) {
|
||||
|
||||
return (exp(c) + exp(-c))/2.0;
|
||||
}
|
||||
|
||||
complex exp(const complex& c) {
|
||||
|
||||
double ex;
|
||||
|
||||
ex=exp(real(c));
|
||||
return complex(ex*cos(imag(c)), ex*sin(imag(c)));
|
||||
}
|
||||
|
||||
complex log(const complex& c) {
|
||||
|
||||
complex t;
|
||||
|
||||
t=arg(c);
|
||||
t=complex(-imag(t), real(t));
|
||||
return log(abs(c)) + t;
|
||||
}
|
||||
|
||||
complex log10(const complex& c) {
|
||||
|
||||
complex t;
|
||||
|
||||
t=arg(c);
|
||||
t=complex(-imag(t), real(t));
|
||||
return (log(abs(c)) + t)/log(10.0);
|
||||
}
|
||||
|
||||
complex pow(const complex& base, double expo) {
|
||||
|
||||
return exp(expo*log(base));
|
||||
}
|
||||
|
||||
complex pow(double base, const complex& expo) {
|
||||
|
||||
return exp(expo*log(base));
|
||||
}
|
||||
|
||||
complex pow(const complex& base, const complex& expo) {
|
||||
|
||||
return exp(expo*log(base));
|
||||
}
|
||||
|
||||
complex sin(const complex& c) {
|
||||
|
||||
complex t;
|
||||
complex twoi(0.0, 2.0);
|
||||
|
||||
t=complex(-imag(c), real(c));
|
||||
return complex((exp(t) - exp(-t))/twoi);
|
||||
}
|
||||
|
||||
complex sinh(const complex& c) {
|
||||
|
||||
return (exp(c) - exp(-c))/2.0;
|
||||
}
|
||||
|
||||
complex sqrt(const complex& c) {
|
||||
|
||||
complex t;
|
||||
|
||||
t=sin(arg(c)/2.0);
|
||||
t=complex(-imag(t), real(t));
|
||||
return sqrt(abs(c))*(cos(arg(c)/2.0) + t);
|
||||
}
|
||||
|
||||
|
||||
complex tan(const complex& c) {
|
||||
|
||||
return sin(c)/cos(c);
|
||||
}
|
||||
|
||||
complex tanh(const complex& c) {
|
||||
|
||||
return sinh(c)/cosh(c);
|
||||
}
|
||||
|
||||
ostream& operator<<(ostream& st, const complex& c) {
|
||||
|
||||
st<< '(' << real(c) << ',' << imag(c) << ')';
|
||||
return st;
|
||||
}
|
||||
|
||||
istream& operator>>(istream& st, complex& c) {
|
||||
|
||||
double r=0.0, i=0.0;
|
||||
|
||||
if(st.peek() == '(')
|
||||
st.get();
|
||||
st >> r;
|
||||
if(st.peek() == ',')
|
||||
st.get();
|
||||
st >> i;
|
||||
if(st.peek() == ')')
|
||||
st.get();
|
||||
c=complex(r, i);
|
||||
return st;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user