Mercurial > hg > xemacs-beta
diff man/lispref/numbers.texi @ 5908:6174848f3e6c
Use parse_integer() in read_atom(); support bases with ratios like integers
src/ChangeLog addition:
2015-05-08 Aidan Kehoe <kehoea@parhasard.net>
* data.c (init_errors_once_early):
Move the Qunsupported_type here from numbers.c, so it's available
when the majority of our types are not supported.
* general-slots.h: Add it here, too.
* number.c: Remove the definition of Qunsupported_type from here.
* lread.c (read_atom):
Check if the first character could reflect a rational, if so, call
parse_integer(), don't check the syntax of the other
characters. This allows us to accept the non-ASCII digit
characters too.
If that worked partially, but not completely, and the next char is
a slash, try to parse as a ratio.
If that fails, try isfloat_string(), but only if the first
character could plausibly be part of a float.
Otherwise, treat as a symbol.
* lread.c (read_rational):
Rename from read_integer. Handle ratios with the same radix
specification as was used for integers.
* lread.c (read1):
Rename read_integer in this function. Support the Common Lisp
#NNNrMMM syntax for parsing a number MMM of arbitrary radix NNN.
man/ChangeLog addition:
2015-05-08 Aidan Kehoe <kehoea@parhasard.net>
* lispref/numbers.texi (Numbers):
Describe the newly-supported arbitrary-base syntax for rationals
(integers and ratios). Describe that ratios can take the same base
specification as integers, something also new.
tests/ChangeLog addition:
2015-05-08 Aidan Kehoe <kehoea@parhasard.net>
* automated/lisp-reader-tests.el:
Check the arbitrary-base integer reader syntax support, just
added. Check the reader base support for ratios, just added.
Check the non-ASCII-digit support in the reader, just added.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 09 May 2015 00:40:57 +0100 |
parents | 9fae6227ede5 |
children |
line wrap: on
line diff
--- a/man/lispref/numbers.texi Fri May 08 20:04:42 2015 +0100 +++ b/man/lispref/numbers.texi Sat May 09 00:40:57 2015 +0100 @@ -18,12 +18,16 @@ of XEmacs) are whole numbers such as @minus{}3, 0, #b0111, #xFEED, #o744. Their values are exact, and their range is limited. The number prefixes `#b', `#o', and `#x' are supported to represent numbers -in binary, octal, and hexadecimal notation (or radix). Floating point -numbers are numbers with fractional parts, such as @minus{}4.5, 0.0, or -2.71828. They can also be expressed in exponential notation: 1.5e2 -equals 150; in this example, @samp{e2} stands for ten to the second -power, and is multiplied by 1.5. Floating point values are not exact; -they have a fixed, limited amount of precision. +in binary, octal, and hexadecimal notation (or radix). The syntax +`#NNNrNUM' is also supported, allowing a radix to be explicitly +specified; e.g. `#20r15' denotes the fixnum 25, expressed in base +twenty. + + Floating point numbers are numbers with fractional parts, such as +@minus{}4.5, 0.0, or 2.71828. They can also be expressed in exponential +notation: 1.5e2 equals 150; in this example, @samp{e2} stands for ten to +the second power, and is multiplied by 1.5. Floating point values are +not exact; they have a fixed, limited amount of precision. Bignums are arbitrary precision integers. When supported, XEmacs can handle any integral calculations you have enough virtual memory to @@ -33,9 +37,13 @@ automatically converts results of computations from fixnum to bignum, and back, depending on the storage required to represent the number. Thus use of bignums are entirely transparent to the user, except for a -few special applications that expect overflows. Ratios are rational -numbers with arbitrary precision. They are notated in the -usual way with the solidus, for example 5/3 or @minus{}22/7. +few special applications that expect overflows. + + Ratios are rational numbers with arbitrary precision. They are notated +in the usual way with the solidus, for example 5/3 or @minus{}22/7. The +syntax for using a particular radix is the same as that for integers, +so, e.g., @samp{#x8/10} is equivalent to @samp{1/2} and @samp{#30r10/4} +to @samp{15/2}, respectively. Bigfloats are floating point numbers with arbitrary precision, which may be specified by the user (and may be different for different