PageRenderTime 32ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/fth/t_floats.fth

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