// complessi.c # include "alfa.h" nc Ncadd (nc z1, nc z2) {nc w; w.x=z1.x+z2.x; w.y=z1.y+z2.y; return w;} nc Nccon (nc z) {z.y=-z.y; return z;} nc Nccos (nc z) {nc w={cosh(z.y)*cos(z.x), -sinh(z.y)*sin(z.x)}; return w;} nc Ncdiv (nc z1, nc z2) {double q,t; nc w; if (fabs(z2.x)>=fabs(z2.y)) {q=z2.y/z2.x; t=z2.x+z2.y*q; w.x=(z1.x+z1.y*q)/t; w.y=(z1.y-z1.x*q)/t; return w;} q=z2.x/z2.y; t=z2.x*q+z2.y; w.x=(z1.x*q+z1.y)/t; w.y=(z1.y*q-z1.x)/t; return w;} nc Ncexp (nc z) {double ex=exp(z.x); nc w={ex*cos(z.y),ex*sin(z.y)}; return w;} nc Ncmolt (nc z1, nc z2) {nc w; w.x=z1.x*z2.x-z1.y*z2.y; w.y=z1.x*z2.y+z2.x*z1.y; return w;} nc Ncsin (nc z) {nc w={cosh(z.y)*sin(z.x), sinh(z.y)*cos(z.x)}; return w;} nc Ncsott (nc z1, nc z2) {nc w; w.x=z1.x-z2.x; w.y=z1.y-z2.y; return w;} double Ncva (nc z) {double vax,vay,t; if (z.x==0) return fabs(z.y); if (z.y==0) return fabs(z.x); vax=fabs(z.x); vay=fabs(z.y); if (vax>=vay) {t=z.y/z.x; return vax*sqrt(1+t*t);} t=z.x/z.y; return vay*sqrt(1+t*t);}