Merge pull request #61 from philburk/docansi
[pforth] / fth / t_floats.fth
CommitLineData
8e9db35f
PB
1\ @(#) t_floats.fth 98/02/26 1.1 17:46:04
2\ Test ANS Forth FLOAT words.
3\
4\ Copyright 1994 3DO, Phil Burk
5
6INCLUDE? }T{ t_tools.fth
7
8ANEW TASK-T_FLOATS.FTH
9
10DECIMAL
113.14159265 fconstant PI
12
13TEST{
14\ ==========================================================
15T{ 1 2 3 }T{ 1 2 3 }T
16\ ----------------------------------------------------- D>F F>D
17\ test some basic floating point <> integer conversion
18T{ 4 0 D>F F>D }T{ 4 0 }T
19T{ 835 0 D>F F>D }T{ 835 0 }T
20T{ -57 -1 D>F F>D }T{ -57 -1 }T
21T{ 15 S>F 2 S>F F/ F>S }T{ 7 }T \ 15.0/2.0 -> 7.5
22
23\ ----------------------------------------------------- input
24T{ 79.2 F>S }T{ 79 }T
25T{ 0.003 F>S }T{ 0 }T
26
27\ ------------------------------------------------------ F~
28T{ 23.4 23.5 0.2 f~ }T{ true }T
29T{ 23.4 23.7 0.2 f~ }T{ false }T
30T{ 922.3 922.3 0.0 f~ }T{ true }T
31T{ 922.3 922.31 0.0 f~ }T{ false }T
32T{ 0.0 0.0 0.0 f~ }T{ true }T
33T{ 0.0 -0.0 0.0 f~ }T{ false }T
34T{ 50.0 51.0 -0.02 f~ }T{ true }T
35T{ 50.0 51.0 -0.002 f~ }T{ false }T
36T{ 500.0 510.0 -0.02 f~ }T{ true }T
37T{ 500.0 510.0 -0.002 f~ }T{ false }T
38
39\ convert number to text representation and then back to float
40: T_F. ( -- ok? ) ( r ftol -f- )
41 fover (f.) >float fswap f~
42 AND
43;
44: T_FS. ( -- ok? ) ( r ftol -f- )
45 fover (fs.) >float fswap f~
46 AND
47;
48: T_FE. ( -- ok? ) ( r ftol -f- )
49 fover (fe.) >float fswap f~
50 AND
51;
52
53: T_FG. ( -- ok? ) ( r ftol -f- )
54 fover (f.) >float fswap f~
55 AND
56;
57
58: T_F>D ( -- ok? ) ( r ftol -f- )
59 fover f>d d>f fswap f~
60;
61
62T{ 0.0 0.00001 T_F. }T{ true }T
63T{ 0.0 0.00001 T_FS. }T{ true }T
64T{ 0.0 0.00001 T_FE. }T{ true }T
65T{ 0.0 0.00001 T_FG. }T{ true }T
66T{ 0.0 0.00001 T_F>D }T{ true }T
67
68T{ 12.34 -0.0001 T_F. }T{ true }T
69T{ 12.34 -0.0001 T_FS. }T{ true }T
70T{ 12.34 -0.0001 T_FE. }T{ true }T
71T{ 12.34 -0.0001 T_FG. }T{ true }T
72T{ 1234.0 -0.0001 T_F>D }T{ true }T
73
74T{ 2345 S>F 79 S>F F/ -0.0001 T_F. }T{ true }T
75T{ 511 S>F -294 S>F F/ -0.0001 T_F. }T{ true }T
76
77: T.SERIES { N matchCFA | flag -- ok? } ( fstart fmult -f- )
78 fswap ( -- fmult fstart )
79 true -> flag
80 N 0
81 ?DO
82 fdup -0.0001 matchCFA execute not
83 IF
84 false -> flag
85 ." T_F_SERIES failed for " i . fdup f. cr
86 leave
87 THEN
88\ i . fdup f. cr
89 fover f*
90 LOOP
91 matchCFA >name id. ." T.SERIES final = " fs. cr
92 flag
93;
94
95: T.SERIES_F. ['] t_f. t.series ;
96: T.SERIES_FS. ['] t_fs. t.series ;
97: T.SERIES_FG. ['] t_fg. t.series ;
98: T.SERIES_FE. ['] t_fe. t.series ;
99: T.SERIES_F>D ['] t_f>d t.series ;
100
101T{ 1.0 1.3 150 t.series_f. }T{ true }T
102T{ 1.0 -1.3 150 t.series_f. }T{ true }T
103T{ 2.3456789 1.3719 150 t.series_f. }T{ true }T
104
105T{ 3000.0 1.298 120 t.series_f>d }T{ true }T
106
107T{ 1.2 1.27751 150 t.series_fs. }T{ true }T
108T{ 7.43 0.812255 200 t.series_fs. }T{ true }T
109
110T{ 1.195 1.30071 150 t.series_fe. }T{ true }T
111T{ 5.913 0.80644 200 t.series_fe. }T{ true }T
112
113T{ 1.395 1.55071 120 t.series_fe. }T{ true }T
114T{ 5.413 0.83644 160 t.series_fe. }T{ true }T
115
116\ ----------------------------------------------------- FABS
117T{ 0.0 FABS 0.0 0.00001 F~ }T{ true }T
118T{ 7.0 FABS 7.0 0.00001 F~ }T{ true }T
119T{ -47.3 FABS 47.3 0.00001 F~ }T{ true }T
120
121\ ----------------------------------------------------- FSQRT
122T{ 49.0 FSQRT 7.0 -0.0001 F~ }T{ true }T
123T{ 2.0 FSQRT 1.414214 -0.0001 F~ }T{ true }T
124
125\ ----------------------------------------------------- FSIN
126T{ 0.0 FSIN 0.0 0.00001 F~ }T{ true }T
127T{ PI FSIN 0.0 0.00001 F~ }T{ true }T
128T{ PI 2.0 F* FSIN 0.0 0.00001 F~ }T{ true }T
129T{ PI 0.5 F* FSIN 1.0 0.00001 F~ }T{ true }T
130T{ PI 6.0 F/ FSIN 0.5 0.00001 F~ }T{ true }T
131
132\ ----------------------------------------------------- \
133}TEST
134