comparison 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
comparison
equal deleted inserted replaced
5907:87e29d93e11b 5908:6174848f3e6c
16 16
17 Fixnums (called just @dfn{integers} in GNU Emacs and older versions 17 Fixnums (called just @dfn{integers} in GNU Emacs and older versions
18 of XEmacs) are whole numbers such as @minus{}3, 0, #b0111, #xFEED, 18 of XEmacs) are whole numbers such as @minus{}3, 0, #b0111, #xFEED,
19 #o744. Their values are exact, and their range is limited. The 19 #o744. Their values are exact, and their range is limited. The
20 number prefixes `#b', `#o', and `#x' are supported to represent numbers 20 number prefixes `#b', `#o', and `#x' are supported to represent numbers
21 in binary, octal, and hexadecimal notation (or radix). Floating point 21 in binary, octal, and hexadecimal notation (or radix). The syntax
22 numbers are numbers with fractional parts, such as @minus{}4.5, 0.0, or 22 `#NNNrNUM' is also supported, allowing a radix to be explicitly
23 2.71828. They can also be expressed in exponential notation: 1.5e2 23 specified; e.g. `#20r15' denotes the fixnum 25, expressed in base
24 equals 150; in this example, @samp{e2} stands for ten to the second 24 twenty.
25 power, and is multiplied by 1.5. Floating point values are not exact; 25
26 they have a fixed, limited amount of precision. 26 Floating point numbers are numbers with fractional parts, such as
27 @minus{}4.5, 0.0, or 2.71828. They can also be expressed in exponential
28 notation: 1.5e2 equals 150; in this example, @samp{e2} stands for ten to
29 the second power, and is multiplied by 1.5. Floating point values are
30 not exact; they have a fixed, limited amount of precision.
27 31
28 Bignums are arbitrary precision integers. When supported, XEmacs can 32 Bignums are arbitrary precision integers. When supported, XEmacs can
29 handle any integral calculations you have enough virtual memory to 33 handle any integral calculations you have enough virtual memory to
30 store. (More precisely, on current architectures the representation 34 store. (More precisely, on current architectures the representation
31 allows integers whose storage would exhaust the address space.) They 35 allows integers whose storage would exhaust the address space.) They
32 are notated in the same way as other integers (fixnums). XEmacs 36 are notated in the same way as other integers (fixnums). XEmacs
33 automatically converts results of computations from fixnum to bignum, 37 automatically converts results of computations from fixnum to bignum,
34 and back, depending on the storage required to represent the number. 38 and back, depending on the storage required to represent the number.
35 Thus use of bignums are entirely transparent to the user, except for a 39 Thus use of bignums are entirely transparent to the user, except for a
36 few special applications that expect overflows. Ratios are rational 40 few special applications that expect overflows.
37 numbers with arbitrary precision. They are notated in the 41
38 usual way with the solidus, for example 5/3 or @minus{}22/7. 42 Ratios are rational numbers with arbitrary precision. They are notated
43 in the usual way with the solidus, for example 5/3 or @minus{}22/7. The
44 syntax for using a particular radix is the same as that for integers,
45 so, e.g., @samp{#x8/10} is equivalent to @samp{1/2} and @samp{#30r10/4}
46 to @samp{15/2}, respectively.
39 47
40 Bigfloats are floating point numbers with arbitrary precision, which 48 Bigfloats are floating point numbers with arbitrary precision, which
41 may be specified by the user (and may be different for different 49 may be specified by the user (and may be different for different
42 bigfloats at the same time). Unlike integers, which are always 50 bigfloats at the same time). Unlike integers, which are always
43 infinitely precise if they can be represented, floating point numbers 51 infinitely precise if they can be represented, floating point numbers