home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l2p130 < prev    next >
Text File  |  1990-07-15  |  4KB  |  107 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 2 Part 130  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.                    ┌───────────────────┐
  6.                    │  Division Review  │
  7.                    └───────────────────┘
  8.  
  9. This is part 13 of lesson 2!  Do you think that part 13 will bring us
  10. bad luck?  Have you experimented with division?  Remember that there are
  11. two common implementations of integer division.  Floored Integer
  12. Division that is the implementation required by the FORTH83 standard,
  13. and hence F-PC which is a FORTH83 standard system and Symmetric Integer
  14. Division which was used by the FORTH79 Standard and FIG Forth systems
  15.  
  16. In Symmetric Integer Division the quotient is always equal to the
  17. truncated value of the real quotient, or you could also say that the
  18. real quotient is always rounded towards zero.  Thus
  19.  
  20.  8/3 =  2.666667(real) =  2 (symmetric integer division)
  21. -8/3 = -2.666667(real) = -2 (symmetric integer division)
  22.  
  23. No matter what the division type the standard division equation:
  24.  
  25.        m = nq + r  must always be satisfied.  Thus for the above
  26.  
  27.  remainder ( 8/3) = r = m - nq =  8 - 3x2  =  2   (symmetric)
  28.  remainder (-8/3) = r = m - nq = -8 - 3x-2 = -2   (symmetric)
  29.  
  30. In Floored Integer Division the quotient is the floor of the real
  31. quotient.  Remember the elevator analogy....  The floor of the real
  32. number x is the largest integer n that is less than or equal to x.
  33.  
  34.  8/3 =  2.666667(real) =  2 (floored integer division)
  35. -8/3 = -2.666667(real) = -3 (floored integer division)
  36.  
  37.  remainder ( 8/3) = r = m - nq =  8 - 3x2  =  2 (floored)
  38.  remainder (-8/3) = r = m - nq = -8 - 3x-3 = -1 (floored)
  39.  
  40. One thing to keep in mind is that both Symmetric Integer Division and
  41. Floored Integer Division will give the same result if m and n both have
  42. the same sign.  That is, if m and n are both positive or if m and n are
  43. both negative the results of Floored and Symmetric will be the same.
  44. If you don't believe this then test it out with the program INTDIV
  45. provided in the previous part of lesson 2.
  46.  
  47. There is a nother plus that you have when you use Forth.  If you really
  48. don't like Floored Integer Division, if you feel that the it is not
  49. worth the trouble you can always just use Symmetric integer division.
  50. Just borrow the definitions  S/MOD, S/ and SMOD from the program
  51. presented in the previous part of lesson 2.
  52.  
  53. Well let's use our division to find the area of a triangle.
  54.  
  55. A = bh/2   We'll make a word called  AREA ( b h -- ) that has for its
  56. output:   Base = xxx    Height = xxx   Area = xxx
  57.  
  58. : AREA ( b h --)
  59.         2DUP SWAP
  60.         CR ." Base =   " .
  61.            ." Height = " .
  62.            * 2 /
  63.            ." Area =   " . ;
  64.  
  65. Well.... that was fairly simple...  and guess what?   It wouldn't matter
  66. whether or not we were using Floored or Symmetric Division the results
  67. would always be the same.  The reason is that the dividend bh and the
  68. divisor 2 both have the same sign (positive) and as long as the dividend
  69. and the divisor have the same sign ( both positive or both negative)
  70. both Symmetric and Floored division give the same results!!!
  71.  
  72. Now try this version of the triangle area program.
  73.  
  74. : TRIANGLE_AREA ( b h --)
  75.        2DUP SWAP
  76.        CR ." Base =   "  .
  77.           ." Height = "  .
  78.           * 2 /MOD
  79.           ." Area = " .
  80.           1 BACKSPACES ( 8  EMIT  does not back up cursor in F-PC)
  81.           ASCII . EMIT
  82.           IF    ASCII 5 EMIT
  83.           ELSE  ASCII 0 EMIT
  84.           THEN ;
  85.  
  86. ╓───────────────╖
  87. ║ Problem 2.17. ║
  88. ╙───────────────╜
  89. a) What do you observe when you use 5 and 3 for the base and height?
  90. b) What do you observe when you use 5 and 4 for the base and height?
  91. c) Explain in detail why you get the result you see for question 1.
  92. d) Could you modify the idea contained in the above to compute the Area
  93. of a circle to three decimal places?  Hint:  It can be done quite easily
  94. and if you can do it you have the potential to become a Forth Super Star!
  95.  
  96. ╓──────────────╖
  97. ║ Problem 2.18 ║
  98. ╙──────────────╜
  99. We end Lesson 2 with a few easy words. Add stack comments and make
  100. high level defintions of the following ....
  101. \ EASY WORDS
  102.         1+  2+  1-  2-  2*  2/  ABS  NEGATE
  103.  
  104. ┌───────────────────────────────────────┐
  105. │  Please move on to Lesson 3 Part 010  │
  106. └───────────────────────────────────────┘
  107.