| 78 | return y ; |
| 79 | } |
| 80 | inline Rcomplex complex__sqrt(Rcomplex z){ |
| 81 | Rcomplex r ; |
| 82 | double mag; |
| 83 | |
| 84 | if( (mag = ::hypot(z.r, z.i)) == 0.0) |
| 85 | r.r = r.i = 0.0; |
| 86 | else if(z.r > 0) { |
| 87 | r.r = ::sqrt(0.5 * (mag + z.r) ); |
| 88 | r.i = z.i / r.r / 2; |
| 89 | } |
| 90 | else { |
| 91 | r.i = ::sqrt(0.5 * (mag - z.r) ); |
| 92 | if(z.i < 0) |
| 93 | r.i = - r.i; |
| 94 | r.r = z.i / r.i / 2; |
| 95 | } |
| 96 | return r ; |
| 97 | } |
| 98 | inline Rcomplex complex__cos(Rcomplex z){ |
| 99 | Rcomplex r ; |
| 100 | r.r = ::cos(z.r) * ::cosh(z.i); |