doc clarifications on eqv?

Part of the clarification is duplicating information about numbers
and character in the documentation of `eqv?`. Since those two type
are the only special cases of `eqv?`, the duplication seems helpful
and managable.
This commit is contained in:
Matthew Flatt 2015-01-24 09:03:56 -07:00
parent 68c5d3d1d6
commit e2261096cb
2 changed files with 22 additions and 15 deletions

View File

@ -66,8 +66,14 @@ values would be equal. See also @racket[gen:equal+hash] and @racket[prop:imperso
Two values are @racket[eqv?] if and only if they are @racket[eq?],
unless otherwise specified for a particular datatype.
The @tech{number} and @tech{character} datatypes are the only ones for which
@racket[eqv?] differs from @racket[eq?].
The @tech{number} and @tech{character} datatypes are the only ones for
which @racket[eqv?] differs from @racket[eq?]. Two numbers are
@racket[eqv?] when they have the same exactness, precision, and are
both equal and non-zero, both @racket[+0.0], both @racket[+0.0f0], both
@racket[-0.0], both @racket[-0.0f0], both @racket[+nan.0], or both
@racket[+nan.f]---considering real and imaginary components separately
in the case of @tech{complex numbers}. Two characters are
@racket[eqv?] when their @racket[char->integer] results are equal.
@examples[
(eqv? 'yes 'yes)

View File

@ -30,14 +30,14 @@ Orthogonal to those categories, each number is also either an
otherwise specified, computations that involve an inexact number
produce inexact results. Certain operations on inexact numbers,
however, produce an exact number, such as multiplying an inexact
number with an exact @racket[0]. Some operations, which can produce an
irrational number for rational arguments (e.g., @racket[sqrt]), may
number with an exact @racket[0]. Operations that mathematically produce
irrational numbers for some rational arguments (e.g., @racket[sqrt]) may
produce inexact results even for exact arguments.
In the case of complex numbers, either the real and imaginary parts
are both exact or inexact, or the number has an exact zero real part
and an inexact imaginary part; a complex number with an exact zero
imaginary part is a real number.
are both exact or inexact with the same precision, or the number has
an exact zero real part and an inexact imaginary part; a complex
number with an exact zero imaginary part is a real number.
Inexact real numbers are implemented as either single- or
double-precision @as-index{IEEE floating-point numbers}---the latter
@ -46,11 +46,6 @@ numerical constants specified as single-precision numbers. Inexact
real numbers that are represented as double-precision floating-point
numbers are @deftech{flonums}.
The precision and size of exact numbers is limited only by available
memory (and the precision of operations that can produce irrational
numbers). In particular, adding, multiplying, subtracting, and
dividing exact numbers always produces an exact result.
Inexact numbers can be coerced to exact form, except for the inexact
numbers @racket[+inf.0], @racket[+inf.f],
@racket[-inf.0], @racket[-inf.f], @racket[+nan.0], and @racket[+nan.f], which
@ -73,6 +68,11 @@ cases where IEEE provides no specification,
the result corresponds to the limit approaching
infinity, or @racket[+nan.0] or @racket[+nan.f] if no such limit exists.
The precision and size of exact numbers is limited only by available
memory (and the precision of operations that can produce irrational
numbers). In particular, adding, multiplying, subtracting, and
dividing exact numbers always produces an exact result.
A @deftech{fixnum} is an exact integer whose two's complement
representation fit into 31 bits on a 32-bit platform or 63 bits on a
64-bit platform; furthermore, no allocation is required when computing
@ -84,10 +84,11 @@ applied to two numbers is undefined, except that numbers produced
by the default reader in @racket[read-syntax] mode are @tech{interned} and therefore @racket[eq?]
when they are @racket[eqv?].
Two numbers are @racket[eqv?] when they are both inexact with the same precision or both
Two real numbers are @racket[eqv?] when they are both inexact with the same precision or both
exact, and when they are @racket[=] (except for @racket[+nan.0], @racket[+nan.f],
@racket[+0.0], @racket[+0.0f0], @racket[-0.0], and @racket[-0.0f0], as noted above). Two numbers are
@racket[equal?] when they are @racket[eqv?].
@racket[+0.0], @racket[+0.0f0], @racket[-0.0], and @racket[-0.0f0], as noted above).
Two complex numbers are @racket[eqv?] when their real and imaginary parts are @racket[eqv?].
Two numbers are @racket[equal?] when they are @racket[eqv?].
@see-read-print["number"]{numbers}