Changes between Version 4 and Version 5 of InexactEqvWeaver
 Timestamp:
 11/25/12 19:38:21 (5 years ago)
Legend:
 Unmodified
 Added
 Removed
 Modified

InexactEqvWeaver
v4 v5 43 43 == Nontrivial changes in the formulation of `eqv?` since R6RS == 44 44 45 * Nontrivial change: "rational numbers" to "exact numbers" in the clause requiring `#f` if "Obj,,1,, and obj,,2,, are rational numbers for which the `=` procedure returns `#f`."45 * '''Nontrivial change''': "rational numbers" to "exact numbers" in the clause requiring `#f` if "Obj,,1,, and obj,,2,, are rational numbers for which the `=` procedure returns `#f`." 46 46 47 47 Note: This clause was redundant, but is kept for the case of exact numbers, so that we may restrict our definition of the predicate "operationally equivalent" to inexact numbers only. … … 52 52 "[...] yield {the same,different} results (in the sense of `eqv?`) when passed as arguments to any other procedure that can be defined as a finite composition of Scheme's standard arithmetic procedures" 53 53 54 * Nontrivial change: Restrict use of the predicate "operationally equivalent" to cases where both arguments are inexact.54 * '''Nontrivial change''': Restrict use of the predicate "operationally equivalent" to cases where both arguments are inexact. 55 55 56 56 * Stylistic change: Move the "same results (in the sense of `eqv?`)" language into the new auxiliary predicate ''substantially different''. 57 57 58 * Significant change: Eliminate the circularity by changing the definition of "substantially different" for two numbers to use `=` instead of `eqv?`.58 * '''Significant change''': Eliminate the circularity by changing the definition of "substantially different" for two numbers to use `=` instead of `eqv?`. 59 59 60 * Significant change: Fix the NaN problem by making sure that two numbers can only be substantially different if at least one of them is numerically equal to itself.60 * '''Significant change''': Fix the NaN problem by making sure that two numbers can only be substantially different if at least one of them is numerically equal to itself. 61 61 62 * Significant change: Restrict the set of procedures that can be used to construct ''f'', and use the R7RS terminology, changing "Scheme's standard arithmetic procedures" to "the standard numerical operations specified in section 6.2.6"62 * '''Significant change''': Restrict the set of procedures that can be used to construct ''f'', and use the R7RS terminology, changing "Scheme's standard arithmetic procedures" to "the standard numerical operations specified in section 6.2.6" 63 63 64 * Significant change: Properly handle the case where `(f z_1)` or `(f z_2)` raise exception(s). Change "`(f z_1)` and `(f z_2`) yield results that are not substantially different" to "`(f z_1)` and `(f z_2)` either both raise exceptions or yield results that are not substantially different."64 * '''Significant change''': Properly handle the case where `(f z_1)` or `(f z_2)` raise exception(s). Change "`(f z_1)` and `(f z_2`) yield results that are not substantially different" to "`(f z_1)` and `(f z_2)` either both raise exceptions or yield results that are not substantially different." 65 65 66 * Significant change: Make sure that the case where both arguments are NaNs is left unspecified by requiring, in the inexact clauses, that at least one argument is numerically equal to itself.66 * '''Significant change''': Make sure that the case where both arguments are NaNs is left unspecified by requiring, in the inexact clauses, that at least one argument is numerically equal to itself. 67 67 68 68 * Simplification: Remove the redundant check for numerical equality as a prerequisite for `eqv?` returning `#t`. … … 70 70 Rationale: If ''obj,,1,,'' and ''obj,,2,,'' are not numerically equal (and not both !NaNs), it trivially follows that ''obj,,1,,'' and ''obj,,2,,'' are not operationally equivalent, since `(+ obj_1`) and `(+ obj_2)`are substantially different. 71 71 72 * Significant change: Relax the requirements for returning `#t` for `eqv?` on inexacts to the cases where "the implementation is able to prove" operational equivalence.72 * '''Significant change''': Relax the requirements for returning `#t` for `eqv?` on inexacts to the cases where "the implementation is able to prove" operational equivalence. 73 73 74 74 We now require only that the "implementations must be able to prove that two inexact numbers with the same internal representation are operationally equivalent.