t2ex/bsd_source/lib/libc/src_bsd/complex/s_cpowf.c | bare source | permlink (0.02 seconds) |
1: /* $OpenBSD: s_cpowf.c,v 1.2 2010/07/18 18:42:26 guenther Exp $ */ 2: /* 3: * Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net> 4: * 5: * Permission to use, copy, modify, and distribute this software for any 6: * purpose with or without fee is hereby granted, provided that the above 7: * copyright notice and this permission notice appear in all copies. 8: * 9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16: */ 17: 18: /* cpowf 19: * 20: * Complex power function 21: * 22: * 23: * 24: * SYNOPSIS: 25: * 26: * float complex cpowf(); 27: * float complex a, z, w; 28: * 29: * w = cpowf (a, z); 30: * 31: * 32: * 33: * DESCRIPTION: 34: * 35: * Raises complex A to the complex Zth power. 36: * Definition is per AMS55 # 4.2.8, 37: * analytically equivalent to cpow(a,z) = cexp(z clog(a)). 38: * 39: * ACCURACY: 40: * 41: * Relative error: 42: * arithmetic domain # trials peak rms 43: * IEEE -10,+10 30000 9.4e-15 1.5e-15 44: * 45: */ 46: 47: #include <complex.h> 48: #include <math.h> 49: 50: float complex 51: cpowf(float complex a, float complex z) 52: { 53: float complex w; 54: float x, y, r, theta, absa, arga; 55: 56: x = crealf(z); 57: y = cimagf(z); 58: absa = cabsf (a); 59: if (absa == 0.0f) { 60: return (0.0f + 0.0f * I); 61: } 62: arga = cargf (a); 63: r = powf (absa, x); 64: theta = x * arga; 65: if (y != 0.0f) { 66: r = r * expf (-y * arga); 67: theta = theta + y * logf (absa); 68: } 69: w = r * cosf (theta) + (r * sinf (theta)) * I; 70: return (w); 71: }