cexp.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright (c) 2011 William Pitcock <nenolod@dereferenced.org>
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  9. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  10. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  11. * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
  12. * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  13. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  14. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  15. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  16. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  17. * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  18. * POSSIBILITY OF SUCH DAMAGE.
  19. */
  20. #include <features.h>
  21. #include <math.h>
  22. #include <complex.h>
  23. __complex__ double cexp(__complex__ double z)
  24. {
  25. __complex__ double ret;
  26. double r_exponent = exp(__real__ z);
  27. __real__ ret = r_exponent * cos(__imag__ z);
  28. __imag__ ret = r_exponent * sin(__imag__ z);
  29. return ret;
  30. }
  31. libm_hidden_def(cexp)
  32. libm_hidden_proto(cexpf)
  33. __complex__ float cexpf(__complex__ float z)
  34. {
  35. __complex__ float ret;
  36. double r_exponent = exp((double)__real__ z);
  37. __real__ ret = r_exponent * (double) cosf(__imag__ z);
  38. __imag__ ret = r_exponent * (double) sinf(__imag__ z);
  39. return ret;
  40. }
  41. libm_hidden_def(cexpf)
  42. #if defined __UCLIBC_HAS_LONG_DOUBLE_MATH__ && !defined __NO_LONG_DOUBLE_MATH
  43. libm_hidden_proto(cexpl)
  44. __complex__ long double cexpl(__complex__ long double z)
  45. {
  46. __complex__ long double ret;
  47. long double r_exponent = expl(__real__ z);
  48. __real__ ret = r_exponent * cosl(__imag__ z);
  49. __imag__ ret = r_exponent * sinl(__imag__ z);
  50. return ret;
  51. }
  52. libm_hidden_def(cexpl)
  53. #endif