~steve-sk2/mingw-w64/oneiric

« back to all changes in this revision

Viewing changes to mingw-w64-crt/complex/csqrt.c

  • Committer: Bazaar Package Importer
  • Author(s): Stephen Kitt
  • Date: 2010-11-18 00:04:46 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101118000446-xe24b423su55onyl
Tags: 1.0+20101003-1
* New maintainer. (Closes: #594371.)
* New upstream snapshot:
  - Includes getopt.h. (Closes: #569914.)
* Build g++ for Win64. (Closes: #600451.)
* Standards-Version 3.9.1 (new packaging).
* Include patch from
  http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64?view=revision&revision=3715
  as suggested by Rafaël Carré.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
2
 
 * This file has no copyright assigned and is placed in the Public Domain.
3
 
 * This file is part of the w64 mingw-runtime package.
4
 
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5
 
 */
6
 
/*
7
 
   csqrt.c
8
 
   Contributed by Danny Smith
9
 
   2003-10-20
10
 
*/
11
 
 
12
 
#include <math.h>
13
 
#include <complex.h>
14
 
 
15
 
double complex  csqrt (double complex Z)
16
 
{
17
 
  double complex Res;
18
 
  double t;
19
 
  double x = __real__ Z;
20
 
  double y = __imag__ Z;
21
 
 
22
 
  if (y == 0.0)
23
 
    {
24
 
      if (x < 0.0)
25
 
        {
26
 
          __real__ Res = 0.0;
27
 
          __imag__ Res = sqrt (-x);
28
 
        }
29
 
      else
30
 
        {
31
 
          __real__ Res = sqrt (x);
32
 
          __imag__ Res = 0.0;
33
 
        }
34
 
    }
35
 
 
36
 
  else if (x == 0.0)
37
 
    {
38
 
      t = sqrt(0.5 * fabs (y));
39
 
      __real__ Res = t;
40
 
      __imag__ Res = y > 0 ? t : -t;
41
 
    }
42
 
 
43
 
  else
44
 
    {
45
 
      t = sqrt (2.0  * (_hypot (x, y) + fabs (x)));
46
 
      double u = t / 2.0;
47
 
      if ( x > 0.0)
48
 
        {       
49
 
          __real__ Res = u;
50
 
          __imag__ Res = y / t;
51
 
        }
52
 
      else
53
 
        {
54
 
          __real__ Res = fabs ( y / t);
55
 
          __imag__ Res = y < 0.0 ? -u : u;
56
 
        }
57
 
    }
58
 
 
59
 
  return Res;
60
 
}
61
 
 
 
1
/**
 
2
 * This file has no copyright assigned and is placed in the Public Domain.
 
3
 * This file is part of the w64 mingw-runtime package.
 
4
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 
5
 */
 
6
/*
 
7
   csqrt.c
 
8
   Contributed by Danny Smith
 
9
   2003-10-20
 
10
*/
 
11
 
 
12
#include <math.h>
 
13
#include <complex.h>
 
14
 
 
15
double complex  csqrt (double complex Z)
 
16
{
 
17
  double complex Res;
 
18
  double t;
 
19
  double x = __real__ Z;
 
20
  double y = __imag__ Z;
 
21
 
 
22
  if (y == 0.0)
 
23
    {
 
24
      if (x < 0.0)
 
25
        {
 
26
          __real__ Res = 0.0;
 
27
          __imag__ Res = sqrt (-x);
 
28
        }
 
29
      else
 
30
        {
 
31
          __real__ Res = sqrt (x);
 
32
          __imag__ Res = 0.0;
 
33
        }
 
34
    }
 
35
 
 
36
  else if (x == 0.0)
 
37
    {
 
38
      t = sqrt(0.5 * fabs (y));
 
39
      __real__ Res = t;
 
40
      __imag__ Res = y > 0 ? t : -t;
 
41
    }
 
42
 
 
43
  else
 
44
    {
 
45
      t = sqrt (2.0  * (_hypot (x, y) + fabs (x)));
 
46
      double u = t / 2.0;
 
47
      if ( x > 0.0)
 
48
        {       
 
49
          __real__ Res = u;
 
50
          __imag__ Res = y / t;
 
51
        }
 
52
      else
 
53
        {
 
54
          __real__ Res = fabs ( y / t);
 
55
          __imag__ Res = y < 0.0 ? -u : u;
 
56
        }
 
57
    }
 
58
 
 
59
  return Res;
 
60
}
 
61