84 lines
2.5 KiB
Plaintext
84 lines
2.5 KiB
Plaintext
|
(* Version 1.10, Nov 1984 *)
|
|||
|
DEFINITION MODULE RealConversions;
|
|||
|
(*
|
|||
|
Conversion Module for floating numbers
|
|||
|
*)
|
|||
|
|
|||
|
|
|||
|
EXPORT QUALIFIED
|
|||
|
RealToString, StringToReal;
|
|||
|
|
|||
|
|
|||
|
PROCEDURE RealToString (r: REAL;
|
|||
|
digits, width : INTEGER;
|
|||
|
VAR str:ARRAY OF CHAR;
|
|||
|
VAR okay : BOOLEAN);
|
|||
|
|
|||
|
(*
|
|||
|
- Convert a REAL to right-justified fixed point or
|
|||
|
exponent representation
|
|||
|
|
|||
|
in: r real number to be represented,
|
|||
|
digits number of digits to the right of the
|
|||
|
decimal point,
|
|||
|
width maximum width of representation,
|
|||
|
|
|||
|
out: str string result,
|
|||
|
okay TRUE if the conversion is done properly,
|
|||
|
FALSE otherwise.
|
|||
|
|
|||
|
If 'digits' < 0 then exponent notation is used,
|
|||
|
otherwise fixed point notation is used. Note that a
|
|||
|
leading '-' is generated if r < 0, but never a '+'.
|
|||
|
|
|||
|
If the representation of 'r' uses fewer than 'width'
|
|||
|
digits, blanks are added on the left. If the
|
|||
|
representation will not fit in 'width' then 'str' is
|
|||
|
returned empty and 'okay' is set to FALSE.
|
|||
|
|
|||
|
The minimum required 'width' is:
|
|||
|
|
|||
|
- if 'digits' < 0: width >= ABS(digits) + 8
|
|||
|
|
|||
|
- if 'digits' >= 0: width >= ABS(digits) + 2 + before,
|
|||
|
where 'before' is the number of digits before the
|
|||
|
decimal point of 'r' in fixed point notation (e.g.
|
|||
|
r = 123.456 --> before = 3, r = 0.012 --> before = 1)
|
|||
|
*)
|
|||
|
|
|||
|
|
|||
|
PROCEDURE StringToReal (str:ARRAY OF CHAR;
|
|||
|
VAR r:REAL;
|
|||
|
VAR okay:BOOLEAN);
|
|||
|
|
|||
|
(*
|
|||
|
- Convert ARRAY OF CHAR to REAL representation.
|
|||
|
|
|||
|
in: str string to be represented,
|
|||
|
|
|||
|
out: r REAL result,
|
|||
|
okay TRUE if the conversion is done properly,
|
|||
|
FALSE otherwise.
|
|||
|
|
|||
|
Leading blanks are skipped, control code characters and
|
|||
|
space are considered as legal terminators. The syntax for
|
|||
|
a legal real representation in 'str' is:
|
|||
|
|
|||
|
realnumber = fixedpointnumber [exponent].
|
|||
|
fixedpointnumber = [sign] {digit} [ '.' {digit} ].
|
|||
|
exponent = ('e' | 'E') [sign] digit {digit}.
|
|||
|
sign = '+' | '-'.
|
|||
|
digit = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|
|
|||
|
'8'|'9'.
|
|||
|
|
|||
|
The following numbers are legal representations of one
|
|||
|
hundred: 100, 10E1, 100E0, 1000E-1, E2, +E2, 1E2, +1E2,
|
|||
|
+1E+2, 1E+2 .
|
|||
|
|
|||
|
At most 15 digits are significant, leading zeros not
|
|||
|
counting. The range of representable real numbers is:
|
|||
|
1.0E-307 <= ABS(r) < 1.0E308
|
|||
|
*)
|
|||
|
|
|||
|
|
|||
|
END RealConversions.
|