home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / historic / v941.tgz / icon.v941src.tar / icon.v941src / tests / general / checkfpx.icn < prev    next >
Text File  |  2000-07-29  |  6KB  |  128 lines

  1. procedure main()
  2.    write("This test of floating-point arithmetic is likely to show")
  3.    write("differences from platform to platform because of differences")
  4.    write("in floating-point precision and details of the routines that")
  5.    write("convert floating-point numbers to strings.  If the values")
  6.    write("produced in local tests are approximately the same in magnitude")
  7.    write("as shown in the standard results, there's nothing to worry about.")
  8.    write("In addition, some platforms may show 0.0 as \"-0.0\".  You can")
  9.    write("ignore this if you wish.")
  10.    p1()
  11.    p2()
  12.    p3()
  13. end
  14.  
  15. procedure p1()
  16.    write("every 1 to 10 do write(?0) ----> ",(every 1 to 10 do write(Image(?0))) | "none")
  17.    write("every i := 1 to 50 do write(real(repl(\"0\",i) || \"2.\")) ----> ",Image(every i := 1 to 50 do write(real(repl("0",i) || "2."))) | "none")
  18.    write("every i := 1 to 30 do write(integer(repl(\"0\",i) || \"2\")) ----> ",Image(every i := 1 to 30 do write(integer(repl("0",i) || "2"))) | "none")
  19.    write("2.0 ~=== +2.0 ----> ",Image(2.0 ~=== +2.0) | "none")
  20.    write("abs(3.0) ----> ",Image(abs(3.0)) | "none")
  21.    write("Image(2e13) ----> ",Image(Image(2e13)) | "none")
  22.    write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none")
  23.    write("Image(2.0) ----> ",Image(Image(2.0)) | "none")
  24.    write("integer(2.0) ----> ",Image(integer(2.0)) | "none")
  25.    write("integer(2.7) ----> ",Image(integer(2.7)) | "none")
  26.    write("integer(\".\") ----> ",Image(integer(".")) | "none")
  27.    write("integer(\".3\") ----> ",Image(integer(".3")) | "none")
  28.    write("integer(\"0.3\") ----> ",Image(integer("0.3")) | "none")
  29.    write("integer(\" . 3\") ----> ",Image(integer(" . 3")) | "none")
  30.    write("integer(\"e2\") ----> ",Image(integer("e2")) | "none")
  31.    write("integer(\"3e500\") ----> ",Image(integer("3e500")) | "none")
  32.    write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none")
  33.    write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none")
  34.    write("numeric(\".\") ----> ",Image(numeric(".")) | "none")
  35.    write("numeric(\".3\") ----> ",Image(numeric(".3")) | "none")
  36.    write("numeric(\"0.3\") ----> ",Image(numeric("0.3")) | "none")
  37. end
  38.  
  39. procedure p2()
  40.    write("numeric(\" . 3\") ----> ",Image(numeric(" . 3")) | "none")
  41.    write("numeric(\"e2\") ----> ",Image(numeric("e2")) | "none")
  42.    write("numeric(\"3e500\") ----> ",Image(numeric("3e500")) | "none")
  43.    write("real(2) ----> ",Image(real(2)) | "none")
  44.    write("real(2.0) ----> ",Image(real(2.0)) | "none")
  45.    write("real(2.7) ----> ",Image(real(2.7)) | "none")
  46.    write("real(\"2\") ----> ",Image(real("2")) | "none")
  47.    write("real(\" 2\") ----> ",Image(real(" 2")) | "none")
  48.    write("real(\"2 \") ----> ",Image(real("2 ")) | "none")
  49.    write("real(\"+2\") ----> ",Image(real("+2")) | "none")
  50.    write("real(\"-2\") ----> ",Image(real("-2")) | "none")
  51.    write("real(\"- 2\") ----> ",Image(real("- 2")) | "none")
  52.    write("real(\" -    2 \") ----> ",Image(real(" -    2 ")) | "none")
  53.    write("real(\"\") ----> ",Image(real("")) | "none")
  54.    write("real(\"--2\") ----> ",Image(real("--2")) | "none")
  55.    write("real(\" \") ----> ",Image(real(" ")) | "none")
  56.    write("real(\"-\") ----> ",Image(real("-")) | "none")
  57.    write("real(\"+\") ----> ",Image(real("+")) | "none")
  58.    write("real(\".\") ----> ",Image(real(".")) | "none")
  59.    write("real(\".3\") ----> ",Image(real(".3")) | "none")
  60.    write("real(\"0.3\") ----> ",Image(real("0.3")) | "none")
  61.    write("real(\" . 3\") ----> ",Image(real(" . 3")) | "none")
  62.    write("real(\"e2\") ----> ",Image(real("e2")) | "none")
  63.    write("real(\"3e500\") ----> ",Image(real("3e500")) | "none")
  64.    write("real(\"7r4\") ----> ",Image(real("7r4")) | "none")
  65.    write("real(\"4r7\") ----> ",Image(real("4r7")) | "none")
  66.    write("real(\"4r 7\") ----> ",Image(real("4r 7")) | "none")
  67.    write("real(\"7r 4\") ----> ",Image(real("7r 4")) | "none")
  68.    write("real(\"16rff\") ----> ",Image(real("16rff")) | "none")
  69.    write("real(\"36rcat\") ----> ",Image(real("36rcat")) | "none")
  70.    write("real(\"36Rcat\") ----> ",Image(real("36Rcat")) | "none")
  71.    write("real(\"36rCAT\") ----> ",Image(real("36rCAT")) | "none")
  72.    write("real(\"1r1\") ----> ",Image(real("1r1")) | "none")
  73.    write("real(\"2r0\") ----> ",Image(real("2r0")) | "none")
  74.    write("real(\"22222222222222222222222222222\") ----> ",Image(real("22222222222222222222222222222")) | "none")
  75.    write("numeric(2.0) ----> ",Image(numeric(2.0)) | "none")
  76.    write("numeric(2.7) ----> ",Image(numeric(2.7)) | "none")
  77.    write("numeric(0.3) ----> ",Image(numeric(0.3)) | "none")
  78.    write("numeric(e2) ----> ",Image(numeric(e2)) | "none")
  79.    write("36. ^ 9 ----> ",Image(36. ^ 9) | "none")
  80.    write("36 ^ 9. ----> ",Image(36 ^ 9.) | "none")
  81.    write("36. ^ 9. ----> ",Image(36. ^ 9.) | "none")
  82.    write("-36. ^ 9 ----> ",Image(-36. ^ 9) | "none")
  83.    write("-36. ^ -9 ----> ",Image(-36. ^ -9) | "none")
  84.    write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".")))) | "failed")
  85.    write((every i := 1 to 37 do write(Image(real(repl("2",i) || ".2")))) | "failed")
  86.    write((every i := 1 to 37 do write(Image((repl("2",i) || ".2") + 1))) | "failed")
  87.    write("2.0 === +2.0 ----> ",Image(2.0 === +2.0) | "none")
  88.    write("?30.0 ----> ",Image(?30.0) | "none")
  89. end
  90.  
  91. procedure p3()
  92.    write("copy(1.0) ----> ",Image(copy(1.0)) | "none")
  93.    write("trim(3.14159,58) ----> ",Image(trim(3.14159,58)) | "none")
  94.    write("Image(2e13) ----> ",Image(Image(2e13)) | "none")
  95.    write("Image(0.0006) ----> ",Image(Image(0.0006)) | "none")
  96. end
  97. procedure Image(x)
  98.    local head, tail, exp, span
  99.  
  100.    span := 9
  101.  
  102.    if type(x) ~== "real" then return image(x)
  103.    else {
  104.       x ? {
  105.          if head := tab(upto('e'))
  106.          then {
  107.             tail := tab(0)
  108.             head ? return (tab(span | 0) || tail)
  109.             }
  110.          else {
  111.             head := tab(span - 1 | 0)
  112.             #
  113.             # if head is too small to include the ".", go to floating point
  114.             # format.
  115.             #
  116.             if exp := *tab(upto('.')) then
  117.                head ? return move(1) || "." || move(span - 3) ||
  118.                   "e+" || (span - 3 + exp)
  119.             else {
  120.                if head[-1] == "." then
  121.                   head ||:= (move(1) | "0")
  122.                return head
  123.                }
  124.             }
  125.          }
  126.       }
  127. end
  128.