source: project/release/5/fp-utils/trunk/fp-inlines.scm @ 36575

Last change on this file since 36575 was 36575, checked in by Kon Lovett, 17 months ago

add inlines

File size: 3.0 KB
Line 
1;;;; fp-inlines.scm  -*- Scheme -*-
2;;;; Kon Lovett, Sep '18
3
4;;;; Issues
5;;
6;; - all instances of (fl< -0.0 0.0) found ?
7
8(declare (bound-to-procedure ##sys#flonum-fraction))
9
10(import scheme
11  (chicken type)
12  (chicken flonum))
13
14;;;(mathh/mathh-constants)
15
16(define-constant FPLN2 0.6931471805599453094172321214581765680755)  ;ln(2)
17(define-constant FPLN10 2.3025850929940456840179914546843642076011) ;ln(10)
18
19(define-constant FPDEG2RAD 0.0174532925199432957692369076848861271344)  ;pi/180
20
21;;;
22
23;;
24
25(: fpzero? (float --> boolean))
26;
27(define-inline (fpzero? n) (or (fp= 0.0 n) (fp= -0.0 n)))
28
29(: fppositive? (float --> boolean))
30;
31(define-inline (fppositive? n) (fp< 0.0 n))
32
33(: fpnatural? (float --> boolean))
34;
35(define-inline (fpnatural? n) (fp<= 0.0 n))
36
37(: fpnegative? (float --> boolean))
38;
39(define-inline (fpnegative? n) (fp> 0.0 n))
40
41(: fpnon-positive? (float --> boolean))
42;
43(define-inline (fpnon-positive? n) (fp>= 0.0 n))
44
45;;
46
47(: fpquotient (float float --> float))
48;
49(define-inline (fpquotient x y) (fptruncate (fp/ x y)))
50
51;;
52
53(: fpfraction (float --> float))
54;
55(define-inline (fpfraction n) (##sys#flonum-fraction n))
56
57;;
58
59(: fpeven? (float --> boolean))
60;
61(define-inline (fpeven? n) (fpzero? (fpfraction (fp/ n 2.0))))
62
63(: fpodd? (float --> boolean))
64;
65(define-inline (fpodd? n) (not (fpeven? n)))
66
67;;
68
69(: fpclosed-right? (float float float --> boolean))
70;
71(define-inline (fpclosed-right? l x h) (and (fp< l x) (fp<= x h)))
72
73(: fpclosed? (float float float --> boolean))
74;
75(define-inline (fpclosed? l x h) (and (fp<= l x) (fp<= x h)))
76
77(: fpclosed-left? (float float float --> boolean))
78;
79(define-inline (fpclosed-left? l x h) (and (fp<= l x) (fp< x h)))
80
81(define-inline (fpclosedr? l x h) (fpclosed-right? l x h))
82(define-inline (fpclosedl? l x h) (fpclosed-left? l x h))
83
84;;
85
86(: fpadd1 (float --> float))
87;
88(define-inline (fpadd1 n) (fp+ n 1.0))
89
90(: fpsub1 (float --> float))
91;
92(define-inline (fpsub1 n) (fp- n 1.0))
93
94;;
95
96(: fpsqr (float --> float))
97;
98(define-inline (fpsqr n) (fp* n n))
99
100(: fpcub (float --> float))
101;
102(define-inline (fpcub n) (fp* n (fp* n n)))
103
104;;
105
106(: fplog2 (float --> float))
107;
108(define-inline (fplog2 x) (fp/ (fplog x) FPLN2))
109
110(: fplog10 (float --> float))
111;
112(define-inline (fplog10 x) (fp/ (fplog x) FPLN10))
113
114;;
115
116(: fpdegree->radian (float --> float))
117;
118(define-inline (fpdegree->radian deg) (fp* deg FPDEG2RAD))
119
120(: fpradian->degree (float --> float))
121;
122(define-inline (fpradian->degree rad) (fp/ rad FPDEG2RAD))
123
124;;
125
126(define-constant FP~EPS flonum-epsilon)
127
128;;
129
130(: fp~= (float float #!optional float --> boolean))
131;
132(define-inline (fp~= x y #!optional (eps FP~EPS)) (fp<= (fpabs (fp- x y)) eps))
133
134(: fp~<= (float float #!optional float --> boolean))
135;
136(define-inline (fp~<= x y #!optional (eps FP~EPS)) (or (fp< x y) (fp~= x y eps)))
137
138(: fp~>= (float float #!optional float --> boolean))
139;
140(define-inline (fp~>= x y #!optional (eps FP~EPS)) (or (fp> x y) (fp~= x y eps)))
141
142;;
143
144(: fpprecision-factor ((or float fixnum) #!optional float --> float))
145;
146(define-inline (fpprecision-factor p #!optional (base 10.0)) (fpexpt base (exact->inexact p)))
Note: See TracBrowser for help on using the repository browser.