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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 5 Part 090  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.           ┌─────────────────────────────────────────┐
  6.           │ Fixed decimal arithmetic demonstration. │
  7.           └─────────────────────────────────────────┘
  8.  
  9. Fixed decimal numbers are take up two stack entries, 32 bits, 4 bytes,
  10. or 2 single numbers.  They have a preset decimal postion that is set
  11. using the word FIXED.  All operators are prefixed with  " X " ( " F "
  12. was not used since it is used for F-PC's floating point operators )
  13.  
  14. Once you have set the number of decimal places you would like to work to
  15. you basicly just prefix all your operators with and " X "
  16.  
  17. Demonstration:
  18.  
  19. 3 FIXED  \ set to work to three decimal places.  ok
  20.  
  21. \ To put a fixed point number on the stack you must enter it
  22. \ with a decimal  and follow it with the word FIX
  23. 14.3 FIX    2.2 FIX <enter> ok
  24.  
  25. \ Most operators are just prefixed with X
  26. XOVER X. <enter> 14.300 ok
  27.  
  28. XDUP X. <enter 2.200  ok
  29.  
  30. X* XDUP X. <enter> 31.460  ok
  31.  
  32. 2.2 FIX X/ X. <enter> 14.300  ok
  33.  
  34. 1234. FIX  4.04 FIX  <enter> ok
  35.  
  36. XOVER XOVER X- X. <enter> 1229.960  ok  \ 1234. - 4.04
  37.  
  38. X+ X. <enter> 1238.040  ok \ 1234. + 4.04
  39. \ *********** LOOK BELOW AND READ *******************
  40. \ To enter fixed point numbers in a definition enter them with
  41. \ the decimal point and the EXACT number of decimal places!
  42. \ as set by the last use of  FIXED !
  43. 3 FIXED  <enter> ok
  44.  
  45. : .AREA ( r -- )  3.142 XOVER X* X* X. ; <enter>  ok
  46.  
  47. 1. FIX  .AREA <enter> 3.142  ok
  48. 2. FIX  .AREA <enter> 12.568  ok
  49. 3. FIX  .AREA <enter> 28.278  ok
  50. .1 FIX  .AREA <enter> 0.031  ok
  51.  
  52. \ Note numbers entered with the correct number of decimal places
  53. \ do not need to be followed with FIX
  54. 111.000 .AREA <enter> 38712.582  ok
  55. 100.000 .AREA <enter> 31420.000  ok
  56.  
  57. 3 FIXED  <enter> ok
  58. 3.142 XCONSTANT PI <enter>  ok
  59. XVARIABLE RADIUS <enter>  ok
  60. 15.5 FIX RADIUS X! <enter>  ok
  61. RADIUS X@ X. <enter> 15.500  ok
  62. RADIUS X@ PI X* X. <enter> 48.701  ok
  63.  
  64. Here are a couple of mixed mode fixed point operators which may
  65. prove useful.
  66.  
  67. \ Multiply two fixed point numbers producing a double fixed point
  68. \  product.
  69. : XM*   ( x1 x2 -- xd=x1*x2 )
  70.        DUP 3 PICK XOR >R     \ Save sign
  71.        DABS 2SWAP DABS      \ ux2 ux1
  72.        UMD*                 \ uqxproduct
  73.        FPLACES 0 ?DO
  74.        BASE @ S>D  DUM/MOD 2ROT 2DROP  \ scale product.
  75.        LOOP
  76.        R> Q+- ;
  77. \ Divide two fixed point numbers leaving fixed pt quotient.
  78. : XM/   ( xd1 x2 -- xquot=x1/x2 )
  79.         DUP 3 PICK XOR >R           \ Save sign
  80.         DABS >R >R QABS             \ uxd1   save divisor
  81.         FPLACES 0
  82.         ?DO BASE @ UQN* LOOP        \ Scale dividend
  83.         R> R> UMD/MOD               \ uxrem uxquot
  84.         2SWAP 2DROP
  85.         R> ?DNEGATE ;
  86.  
  87. ╓───────────────╖
  88. ║ Problem 5.12  ║
  89. ╙───────────────╜
  90. Use the ideas in the above definitions to implement the word X*/ which
  91. functions like */ except it assumes fixed point numbers.
  92.  
  93. X*/ ( x1 x2 x3 -- x4 ) \ where x4 = x1*x2/x3
  94.  
  95. Note: You would like X*/ to retain an accurate 64 bit fixed point
  96.       intermediate product.
  97.  
  98. ╓───────────────╖
  99. ║ Problem 5.13  ║
  100. ╙───────────────╜
  101. As an exercise in using fixed point arithmetic rewrite the polygon area
  102. case study of Lesson 4 Part 15 so that it all aritmetic is done with
  103. fixed point numbers. You may keep loop counters as single numbers.
  104.  
  105. ┌────────────────────────────────────┐
  106. │  Please Move to Lesson 5 Part 100  │
  107. └────────────────────────────────────┘
  108.