1 /* $OpenBSD: s_clogl.c,v 1.2 2011/07/20 19:28:33 martynas Exp $ */ 2 3 /* 4 * Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 /* clogl.c 20 * 21 * Complex natural logarithm 22 * 23 * 24 * 25 * SYNOPSIS: 26 * 27 * long double complex clogl(); 28 * long double complex z, w; 29 * 30 * w = clogl( z ); 31 * 32 * 33 * 34 * DESCRIPTION: 35 * 36 * Returns complex logarithm to the base e (2.718...) of 37 * the complex argument x. 38 * 39 * If z = x + iy, r = sqrt( x**2 + y**2 ), 40 * then 41 * w = log(r) + i arctan(y/x). 42 * 43 * The arctangent ranges from -PI to +PI. 44 * 45 * 46 * ACCURACY: 47 * 48 * Relative error: 49 * arithmetic domain # trials peak rms 50 * DEC -10,+10 7000 8.5e-17 1.9e-17 51 * IEEE -10,+10 30000 5.0e-15 1.1e-16 52 * 53 * Larger relative error can be observed for z near 1 +i0. 54 * In IEEE arithmetic the peak absolute error is 5.2e-16, rms 55 * absolute error 1.0e-16. 56 */ 57 58 #include <complex.h> 59 #include <math.h> 60 61 long double complex 62 clogl(long double complex z) 63 { 64 long double complex w; 65 long double p, rr; 66 67 /*rr = sqrt(z->r * z->r + z->i * z->i);*/ 68 p = cabsl(z); 69 p = logl(p); 70 rr = atan2l(cimagl(z), creall(z)); 71 w = p + rr * I; 72 return (w); 73 } 74