File: root.lisp

package info (click to toggle)
maxima 5.47.0-9
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 193,104 kB
  • sloc: lisp: 434,678; fortran: 14,665; tcl: 10,990; sh: 4,577; makefile: 2,763; ansic: 447; java: 328; python: 262; perl: 201; xml: 60; awk: 28; sed: 15; javascript: 2
file content (146 lines) | stat: -rw-r--r-- 4,265 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
;;; Compiled by f2cl version:
;;; ("f2cl1.l,v 95098eb54f13 2013/04/01 00:45:16 toy $"
;;;  "f2cl2.l,v 95098eb54f13 2013/04/01 00:45:16 toy $"
;;;  "f2cl3.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $"
;;;  "f2cl4.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $"
;;;  "f2cl5.l,v 95098eb54f13 2013/04/01 00:45:16 toy $"
;;;  "f2cl6.l,v 1d5cbacbb977 2008/08/24 00:56:27 rtoy $"
;;;  "macros.l,v 1409c1352feb 2013/03/24 20:44:50 toy $")

;;; Using Lisp CMU Common Lisp snapshot-2020-04 (21D Unicode)
;;; 
;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t)
;;;           (:coerce-assigns :as-needed) (:array-type ':array)
;;;           (:array-slicing t) (:declare-common nil)
;;;           (:float-format double-float))

(in-package "HOMPACK")


(let ((ic 0)
      (kount 0)
      (a 0.0)
      (acbs 0.0)
      (acmb 0.0)
      (ae 0.0)
      (cmb 0.0)
      (fa 0.0)
      (fb 0.0)
      (fc 0.0)
      (fx 0.0)
      (p 0.0)
      (q 0.0)
      (re 0.0)
      (tol 0.0)
      (u 0.0))
  (declare (type (f2cl-lib:integer4) ic kount)
           (type (double-float) a acbs acmb ae cmb fa fb fc fx p q re tol u))
  (defun root (t$ ft b c relerr abserr iflag)
    (declare (type (f2cl-lib:integer4) iflag)
             (type (double-float) abserr relerr c b ft t$))
    (prog ()
      (declare)
      (if (>= iflag 0) (go label100))
      (setf iflag (abs iflag))
      (f2cl-lib:computed-goto (label200 label300 label400) iflag)
     label100
      (setf u (f2cl-lib:d1mach 4))
      (setf re (max relerr u))
      (setf ae (max abserr 0.0))
      (setf ic 0)
      (setf acbs (abs (- b c)))
      (setf a c)
      (setf t$ a)
      (setf iflag -1)
      (go end_label)
     label200
      (setf fa ft)
      (setf t$ b)
      (setf iflag -2)
      (go end_label)
     label300
      (setf fb ft)
      (setf fc fa)
      (setf kount 2)
      (setf fx (max (abs fb) (abs fc)))
     label1
      (if (>= (abs fc) (abs fb)) (go label2))
      (setf a b)
      (setf fa fb)
      (setf b c)
      (setf fb fc)
      (setf c a)
      (setf fc fa)
     label2
      (setf cmb (* 0.5f0 (- c b)))
      (setf acmb (abs cmb))
      (setf tol (+ (* re (abs b)) ae))
      (if (<= acmb tol) (go label8))
      (if (>= kount 500) (go label12))
      (setf p (* (- b a) fb))
      (setf q (- fa fb))
      (if (>= p 0.0f0) (go label3))
      (setf p (- p))
      (setf q (- q))
     label3
      (setf a b)
      (setf fa fb)
      (setf ic (f2cl-lib:int-add ic 1))
      (if (< ic 4) (go label4))
      (if (>= (* 8.0f0 acmb) acbs) (go label6))
      (setf ic 0)
      (setf acbs acmb)
     label4
      (if (> p (* (abs q) tol)) (go label5))
      (setf b (+ b (f2cl-lib:sign tol cmb)))
      (go label7)
     label5
      (if (>= p (* cmb q)) (go label6))
      (setf b (+ b (/ p q)))
      (go label7)
     label6
      (setf b (* 0.5f0 (+ c b)))
     label7
      (setf t$ b)
      (setf iflag -3)
      (go end_label)
     label400
      (setf fb ft)
      (if (= fb 0.0f0) (go label9))
      (setf kount (f2cl-lib:int-add kount 1))
      (if (/= (f2cl-lib:sign 1.0 fb) (f2cl-lib:sign 1.0 fc)) (go label1))
      (setf c a)
      (setf fc fa)
      (go label1)
     label8
      (if (= (f2cl-lib:sign 1.0 fb) (f2cl-lib:sign 1.0 fc)) (go label11))
      (if (> (abs fb) fx) (go label10))
      (setf iflag 1)
      (go end_label)
     label9
      (setf iflag 2)
      (go end_label)
     label10
      (setf iflag 3)
      (go end_label)
     label11
      (setf iflag 4)
      (go end_label)
     label12
      (setf iflag 5)
      (go end_label)
     end_label
      (return (values t$ nil b c nil nil iflag)))))

(in-package #:cl-user)
#+#.(cl:if (cl:find-package '#:f2cl) '(and) '(or))
(eval-when (:load-toplevel :compile-toplevel :execute)
  (setf (gethash 'fortran-to-lisp::root fortran-to-lisp::*f2cl-function-info*)
          (fortran-to-lisp::make-f2cl-finfo
           :arg-types '((double-float) (double-float) (double-float)
                        (double-float) (double-float) (double-float)
                        (fortran-to-lisp::integer4))
           :return-values '(fortran-to-lisp::t$ nil fortran-to-lisp::b
                            fortran-to-lisp::c nil nil fortran-to-lisp::iflag)
           :calls '(fortran-to-lisp::d1mach))))