Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | PROGRAM INVESTIGATEREPRESENTATION(OUTPUT); |
2 | ||
3 | VAR BASE, | |
4 | NUMBEROFDIGITS, | |
5 | I : INTEGER; | |
6 | ROUNDING : BOOLEAN; | |
7 | EPSILON : REAL; | |
8 | ||
9 | ||
10 | ||
11 | PROCEDURE ENQUIRY(VAR RADIX,DIGITS: INTEGER; VAR ROUNDS: BOOLEAN); | |
12 | ||
13 | VAR NUMBER, | |
14 | INCREMENT : REAL; | |
15 | BEGIN | |
16 | NUMBER := 2; | |
17 | WHILE ((NUMBER+1) - NUMBER)=1 DO NUMBER := NUMBER*2; | |
18 | INCREMENT := 2; | |
19 | WHILE (NUMBER+INCREMENT)=NUMBER DO INCREMENT := 2*INCREMENT; | |
20 | RADIX := TRUNC((NUMBER+INCREMENT) - NUMBER); | |
21 | ROUNDS := (NUMBER + (RADIX-1))<>NUMBER; | |
22 | DIGITS := 0; | |
23 | NUMBER := 1; | |
24 | WHILE ((NUMBER+1) - NUMBER)=1 DO | |
25 | BEGIN DIGITS := DIGITS +1; | |
26 | NUMBER := NUMBER * RADIX | |
27 | END | |
28 | END (* INQUIRY *); | |
29 | ||
30 | ||
31 | ||
32 | BEGIN | |
33 | ENQUIRY(BASE,NUMBEROFDIGITS,ROUNDING); | |
34 | WRITELN("BASE", BASE:5); | |
35 | WRITELN("NUMBER OF DIGITS", NUMBEROFDIGITS:5); | |
36 | IF ROUNDING | |
37 | THEN WRITELN("ROUNDED") | |
38 | ELSE WRITELN("TRUNCATED"); | |
39 | EPSILON := 1; | |
40 | FOR I := 1 TO NUMBEROFDIGITS DO EPSILON := EPSILON/BASE; | |
41 | IF ROUNDING THEN EPSILON := EPSILON/2; | |
42 | WRITELN("BEST AND WORST PRECISIONS ARE", | |
43 | EPSILON, EPSILON*BASE) | |
44 | END. |