(* Abbreviation: RealConv *) (* 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.