home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 January / enter-2004-01.iso / files / maxima-5.9.0.exe / {app} / share / maxima / 5.9.0 / src / numerical / slatec / zabs.lisp < prev    next >
Encoding:
Text File  |  2003-02-09  |  982 b   |  34 lines

  1. ;;; Compiled by f2cl version 2.0 beta 2002-05-06
  2. ;;; 
  3. ;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t)
  4. ;;;           (:coerce-assigns :as-needed) (:array-type ':simple-array)
  5. ;;;           (:array-slicing nil) (:declare-common nil)
  6. ;;;           (:float-format double-float))
  7.  
  8. (in-package "SLATEC")
  9.  
  10.  
  11. (defun zabs (zr zi)
  12.   (declare (type double-float zi zr))
  13.   (prog ((u 0.0) (v 0.0) (q 0.0) (s 0.0) (zabs 0.0))
  14.     (declare (type double-float zabs s q v u))
  15.     (setf u (coerce (abs zr) 'double-float))
  16.     (setf v (coerce (abs zi) 'double-float))
  17.     (setf s (+ u v))
  18.     (setf s (* s 1.0))
  19.     (if (= s 0.0) (go label20))
  20.     (if (> u v) (go label10))
  21.     (setf q (/ u v))
  22.     (setf zabs (* v (f2cl-lib:fsqrt (+ 1.0 (* q q)))))
  23.     (go end_label)
  24.    label10
  25.     (setf q (/ v u))
  26.     (setf zabs (* u (f2cl-lib:fsqrt (+ 1.0 (* q q)))))
  27.     (go end_label)
  28.    label20
  29.     (setf zabs 0.0)
  30.     (go end_label)
  31.    end_label
  32.     (return (values zabs nil nil))))
  33.  
  34.