ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/pvdsp/carith.c

This is carith.c in view mode; [Download] [Up]

#include "pv.h"

/*
 * complex arithmetic routines
 */
complex cadd( complex x, complex y ) { /* return x + y */
 static complex z ;
    z.re = x.re + y.re ;
    z.im = x.im + y.im ;
    return( z ) ;
}
complex csub( complex x, complex y ) { /* return x - y */
 static complex z ;
    z.re = x.re - y.re ;
    z.im = x.im - y.im ;
    return( z ) ;
}
complex cmult( complex x, complex y ) { /* return x*y */
 static complex z ;
    z.re = x.re*y.re - x.im*y.im ;
    z.im = x.re*y.im + x.im*y.re ;
    return( z ) ;
}
complex scmult( float s, complex x ) { /* return s*x */
 static complex z ;
    z.re = s*x.re ;
    z.im = s*x.im ;
    return( z ) ;
}
complex cdiv( complex x, complex y ) { /* return x/y */
 static complex z ;
 float mag, ang ; /* polar arithmetic more robust here */
    mag = CABS( x )/CABS( y ) ;
    if ( x.re != 0. && y.re != 0. )
	ang = atan2( x.im, x.re) - atan2( y.im, y.re) ;
    else
	ang = 0. ;
    z.re = mag*cos( ang ) ;
    z.im = mag*sin( ang ) ;
    return( z ) ;
}
complex conjg( complex x ) { /* return x* */
 static complex y ;
    y.re = x.re ;
    y.im = -x.im ;
    return( y ) ;
}
complex csqrt( complex x ) { /* return sqrt(x) */
 static complex z ;
 float mag, ang ;
    mag = sqrt( CABS( x ) ) ;
    if ( x.re != 0. )
	ang = atan2( x.im, x.re)/2. ;
    else
	ang = 0. ;
    z.re = mag*cos( ang ) ;
    z.im = mag*sin( ang ) ;
    return( z ) ;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.