[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: #\a octothorpe syntax vs SRFI 10
Aubrey Jaffer wrote:
>> English doesn't much help remember Scheme exponent markers:
>> The letters `s', `f', `d', and `l' specify the use of SHORT, SINGLE,
>> DOUBLE, and LONG precision, respectively. [R5RS]
>> I don't usually think of a DOUBLE as shorter than a LONG. And where
>> did `f' for SINGLE come from? Maybe it is a C-ism. In any case, it
>> is one of five characters (with 'e') rather than one of five longer
>> sequences to remember.
> Actually, scheme exponent markers other than default-precision 'e' are
> 's' 'f' 'd' and 'l', for 'short', 'float', 'double', and 'long',
> which only makes sense if you are a C programmer.
First, some background stuff:
IEEE 754 specifies two basic and two extended floating-point formats. C
specifies three floating-point types, usually mapped to two or three of
the IEEE 754 formats. R5RS specifies four floating-point precisions and
recommends the use of IEEE 754, but its types don't quite match IEEE
754 or C:
IEEE 754 format C type Scheme precision
single float f/single
single extended N/A s/short (?)
double double d/double
double extended long double l/long
The f/single and d/double precisions map neatly to IEEE 754 and C. The
l/long precision maps neatly to C and should usually use the IEEE 754
"double" or "double extended" format. However, it's not clear what to
use for s/short. The R5RS description suggests that "short" is less
precise than "single," but the most obvious translation into IEEE 754
formats suggests just the opposite.
Next, some issues for SRFI 58:
The current names for flonum arrays are "real-64" and "real-32,"
corresponding to "IEEE 64.bit floating point real" and "IEEE 32.bit
floating point real." There are a few problems with this.
First, the SRFI should cite IEEE 754 specifically, since the IEEE has
standardized more than one system of floating-point formats. The correct
full name of the standard is "ANSI/IEEE Std 754–1985, IEEE Standard for
Binary Floating-Point Arithmetic."
Second, the format names are properly "single" and "double," not
"32.bit" and "64.bit." Note that a system could have a 64-bit "single
extended" format, which would make the current SRFI 58 names ambiguous.
Third, both IEEE 754 and R5RS Scheme specify four floating-point
formats, but SRFI 58 currently supports only two. It should probably
support the other two types.
Fourth, if the SRFI requires IEEE 754 representations, it should also
mandate a particular correspondence between IEEE 754 formats and Scheme
precisions (e.g., f=single, s=single extended, etc). Otherwise, users
won't be able to match literal reals to array types reliably.
Finally, the array element prefix should match IEEE 754 (single,
double), Scheme (f/single, d/double), or SRFI 47 (ar32, ar64). The
current "real-32" and "real-64" prefixes don't quite match any of those.
Bradd W. Szonye