File: float.4th

package info (click to toggle)
pfe 0.9.14-5
  • links: PTS
  • area: main
  • in suites: potato
  • size: 1,436 kB
  • ctags: 2,439
  • sloc: ansic: 14,095; sh: 438; asm: 113; makefile: 70; perl: 13
file content (131 lines) | stat: -rw-r--r-- 3,817 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
\
\ test/float.4th ---	Does a few tests of the floating point word set.
\			Only the most basic things.
\ (duz 05Aug93)
\

CR .( floating point word set)
CR .( =======================)
CR

MARKER FORGET-FLOAT-TESTS

DECIMAL

CR .( testing F~) CR .(    )

 1.0E0		 1.0E0		 0E		F~ Y
 1.0E0		 1.1E0		 0E		F~ N SPACE

 1.000000E0	 1.000001E0	 0.0000011E0	F~ Y
-1.000000E0	-1.000001E0	 0.0000011E0	F~ Y
 1.000000E0	 1.000001E0	 0.0000009E0	F~ N
 1.000000E0	-1.000001E0	 0.0000011E0	F~ N
-1.000000E0	 1.000001E0	 0.0000011E0	F~ N SPACE

 1.000000E10	 1.000001E10	-0.0000006E0	F~ Y
-1.000000E10	-1.000001E10	-0.0000006E0	F~ Y
 1.000000E10	 1.000001E10	-0.0000004E0	F~ N
-1.000000E10	 1.000001E10	-0.0000006E0	F~ N
 1.000000E10	-1.000001E10	-0.0000006E0	F~ N SPACE D FD

: F=	0E F~ ;			\ identity
: FEX	F= Y ;			\ 0 if two floats identical
: FEQ	-1E-15 F~ Y ;		\ 0 if two floats have same value

CR .( floating point number input) CR .(    )
1E0	FDEPTH 1 = Y		\ interpreted floating number
1. D>F	FDEPTH 2 = Y		\ converted floating number from double
FEX	D FD			\ should be exactly identical

: TEST>FLOAT	S" "		>FLOAT Y 0E0		FEX
		S"      "	>FLOAT Y 0E0		FEX
		S" 0E "		>FLOAT Y 0E0		FEX
		S"  0E0   "	>FLOAT Y 0E0		FEX
		S"  +0D  "	>FLOAT Y 0E0		FEX
		S"  0E+0  "	>FLOAT Y 0E0		FEX
		S"  1-1   "	>FLOAT Y 1E-1		FEX
		S"  1+1   "	>FLOAT Y 1E1		FEX
		S"  1      "	>FLOAT Y 1E0		FEX
		S"  1.E+1  "	>FLOAT Y 1E1		FEX
		S"  .1E+1  "	>FLOAT Y 1E0		FEX
		S" 10.E-1"	>FLOAT Y 1E0		FEX
		S"  -1.E+0"	>FLOAT Y -1E0		FEQ
		S"  -.1E+1"	>FLOAT Y -1E0		FEQ
		S" -10.E-1"	>FLOAT Y -1E0		FEQ
		S" +1234.56E-9"	>FLOAT Y +1234.56E-9	FEQ
		S" -1234.56E+9"	>FLOAT Y -1234.56E+9	FEQ ;

CR .(    ) TEST>FLOAT SPACE D FD

CR .( floating point constants and variables) CR .(    )
+.1234567E+09 FCONSTANT FC1 FD	FC1 123456700. D>F FEX	FD
-.7654321E-34 FCONSTANT FC2 FD	FC2 -.7654321E-34 FEX	FD	SPACE

\ constant name of different length to detect alignment problems
+.1234567E+09 FCONSTANT FCONST1 FD  FCONST1 123456700. D>F FEX	FD
-.7654321E-34 FCONSTANT FCONST2 FD  FCONST2 -.7654321E-34 FEX	FD	SPACE

FVARIABLE FV1		FC1 FV1     F! FD
FVARIABLE FVARIA2	FC2 FVARIA2 F! FD	SPACE FD

FV1     F@ FC1 FEX
FVARIA2 F@ FC2 FEX

FC2 FV1     F!  FV1     F@ FC2 FEX
FC1 FVARIA2 F!  FVARIA2 F@ FC1 FEX	SPACE D FD

CR .( floating point stack operations) CR .(    )
FC1 FC2		FDROP	FC1 F=				  Y FD	D SPACE
FC1 FC2		FDUP	FC2 F=  FC2 F=  AND  FC1 F=  AND  Y FD	D SPACE
FC1 FC2		FSWAP	FC1 F=  FC2 F=  AND		  Y FD	D SPACE
FC1 FC2		FOVER	FC1 F=  FC2 F=  AND  FC1 F=  AND  Y FD  D SPACE
FC1 FC2	1E0	FROT	FC1 F=  1E0 F=  AND  FC2 F=  AND  Y FD	D SPACE


CR .( testing REPRESENT) CR .(    )
: TEST-REPRESENT
	\ width --- ; F: r -- ;
	FDUP F0< >R
	PAD OVER REPRESENT  DROP
	R> = Y  .
	[CHAR] " EMIT PAD SWAP TYPE [CHAR] " EMIT SPACE SPACE ;

          0E0  1 TEST-REPRESENT
          0E0  3 TEST-REPRESENT
          0E0  7 TEST-REPRESENT
          0E0 11 TEST-REPRESENT		CR .(    )

          1E0  1 TEST-REPRESENT
         -1E0  3 TEST-REPRESENT
          1E0  7 TEST-REPRESENT
         -1E0 11 TEST-REPRESENT		CR .(    )

          1E1   1 TEST-REPRESENT
         -1E3   3 TEST-REPRESENT
          1E5   7 TEST-REPRESENT
         -1E11 11 TEST-REPRESENT	CR .(    )

0.950000001E1   1 TEST-REPRESENT
    -0.9994E3   3 TEST-REPRESENT
.9999999501E5   7 TEST-REPRESENT
 -.99999999E30  9 TEST-REPRESENT	CR .(    )

0.950000001E-1  1 TEST-REPRESENT
    -0.9994E-3  3 TEST-REPRESENT
  .99999995E-5  7 TEST-REPRESENT
 -.99999999E-30 9 TEST-REPRESENT	CR .(    )

  123456789E1   1 TEST-REPRESENT
 -123456789E3   3 TEST-REPRESENT
  123456789E5   7 TEST-REPRESENT
 -123456789E30  9 TEST-REPRESENT	CR .(    )

  123456789E-1  1 TEST-REPRESENT
 -123456789E-3  3 TEST-REPRESENT
  123456789E-5  7 TEST-REPRESENT
 -123456789E-30 9 TEST-REPRESENT	CR .(    )

D FD

FORGET-FLOAT-TESTS