zabs.f 866 B

1234567891011121314151617181920212223242526272829
  1. DOUBLE PRECISION FUNCTION ZABS(ZR, ZI)
  2. C***BEGIN PROLOGUE ZABS
  3. C***REFER TO ZBESH,ZBESI,ZBESJ,ZBESK,ZBESY,ZAIRY,ZBIRY
  4. C
  5. C ZABS COMPUTES THE ABSOLUTE VALUE OR MAGNITUDE OF A DOUBLE
  6. C PRECISION COMPLEX VARIABLE CMPLX(ZR,ZI)
  7. C
  8. C***ROUTINES CALLED (NONE)
  9. C***END PROLOGUE ZABS
  10. DOUBLE PRECISION ZR, ZI, U, V, Q, S
  11. U = DABS(ZR)
  12. V = DABS(ZI)
  13. S = U + V
  14. C-----------------------------------------------------------------------
  15. C S*1.0D0 MAKES AN UNNORMALIZED UNDERFLOW ON CDC MACHINES INTO A
  16. C TRUE FLOATING ZERO
  17. C-----------------------------------------------------------------------
  18. S = S*1.0D+0
  19. IF (S.EQ.0.0D+0) GO TO 20
  20. IF (U.GT.V) GO TO 10
  21. Q = U/V
  22. ZABS = V*DSQRT(1.D+0+Q*Q)
  23. RETURN
  24. 10 Q = V/U
  25. ZABS = U*DSQRT(1.D+0+Q*Q)
  26. RETURN
  27. 20 ZABS = 0.0D+0
  28. RETURN
  29. END