home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
forth
/
compiler
/
fpc
/
tutor
/
l6p010
< prev
next >
Wrap
Text File
|
1990-07-15
|
4KB
|
110 lines
╔════════════════════════════════════════════════════╗
║ Lesson 6 Part 010 F-PC 3.5 Tutorial by Jack Brown ║
╚════════════════════════════════════════════════════╝
┌─────────────────────────┐
│ Topics for Lesson 6 │
└─────────────────────────┘
0) Review of Lesson 5
1) Forth String Primitives
2) Numeric Output Formatting.
3) COMPILE [COMPILE] and IMMEDIATE
4) Simple String Package.
5) Case Statement
6) Line Editor Case Study.
┌──────────────────────────────────────────┐
│ Review of the */ , "star-slash" scalar. │
└──────────────────────────────────────────┘
*/ ( a b c -- ab/c )
Perform multiplication and then division. Star-slash multiplies 16-bit
a and 16-bit b to form a 32-bit intermediate result which is then
divided by 16-bit c to give a 16-bit result. The 32-bit intermediate
product ensures accurate results when multiplying by fractions. We use
*/ to multiply a by the fraction b/c
Examples:
32-bit intermediate product results in correct answer.
15000 3 4 */ gives 11250 correct answer
16-bit intermediate product results in overflow and the
15000 3 * 4 / gives -5134 wrong answer
┌──────────────────────────────┐
│ Review of the */MOD Scalar │
└──────────────────────────────┘
The "star-slash-mod", scalar and its application to rounding fractions.
*/MOD ( a b c -- r q )
Compute ab/c with 32-bit intermediate product ab and leave
quotient q and remainder r . Note: Forth-83 */MOD uses
signed values a b c and uses floored division.
Rounding calculations that involve division.
: %R1 10 */ 5 + 10 / . ;
: %R2 50 */ 1+ 2/ . ;
: %R3 100 */MOD SWAP 50 + 100 / + . ;
: %R4 100 */MOD SWAP 49 > NEGATE + . ;
\ Fractions: see Brodie page 125 for more.
: *PI 355 113 */ ;
: *SQRT(2) 19601 13860 */ ;
: *E 28667 10546 */ ;
┌─────────────────────────────────────────────┐
│ Review of Infinite and Indefinite Loops. │
└─────────────────────────────────────────────┘
The infinite loop with no exit.
... (step 1) BEGIN (step2) AGAIN (step3) ...
The infinite loop with EXIT escape hatch.
... (s1) BEGIN (s2)
(condition) IF EXIT THEN
(s3)
AGAIN (s4) ...
Indefinite Loops
... (s1) BEGIN (s2)
(condition)
UNTIL (s3) ...
... (s1) BEGIN (s2)
(condition)
WHILE (s3)
REPEAT (s4) ...
┌───────────────────────┐
│ Review of Do Loops │
└───────────────────────┘
... (s1) l i DO (s2) LOOP (s3) ...
... (s1) l i DO (s2) n +LOOP (s3) ...
... (s1) l i ?DO (s2) LOOP (s3) ...
... (s1) l i ?DO (s2) n +LOOP (s3) ...
┌─────────────────────────┐
│ Leaving Loops early. │
└─────────────────────────┘
(s1) l i DO (s2)
(condition) IF (s3) LEAVE THEN
(s4)
LOOP (s5) ...
This is an alternative form if step 3 is not required.
(s1) l i DO (s2)
(condition) ?LEAVE
(s4)
LOOP (s5) ...
┌─────────────────────────────────────┐
│ Please Move to Lesson 6 Part 020 │
└─────────────────────────────────────┘