| 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. |