[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: comparison operators and *typos

This page is part of the web mail archives of SRFI 70 from before July 7th, 2015. The new archives for SRFI 70 contain all messages, not just those from before July 7th, 2015.



 | Date: Thu, 07 Jul 2005 10:46:31 -0400
 | From: Paul Schlie <schlie@xxxxxxxxxxx>
 | 
 | >  | Date: Wed, 06 Jul 2005 13:55:40 -0400
 | >  | From: Paul Schlie <schlie@xxxxxxxxxxx>
 | >  | 
 | >  | Where absolute zero is designated as 0, and who's reciprocal is 0, as
 | >  | the average value of it's -1/0 and +1/0 limits would be 0; as would 0/0,
 | > 
 | > Then the FINITE? predicate becomes useless.
 | 
 | - so?

SRFI-70:

  This SRFI attempts to strike a balance between tolerance and
  signaling of range errors.  Having #i+/0 and #i-/0 allows one level
  of calculation to be executed before bounds checking.

That detection is via the FINITE? procedure.

  Subsequent numerical calculations on infinities can signal an error
  or return a non-real infinity: #i0/0.  #i0/0 can be considered an
  error waiting to happen.

I'm sorry that SRFI-70 can't accommodate your proposals.  They are
complicated and nonuniform; they don't significantly improve upon the
capabilities of SRFI-70; and you have not grounded them in terms of
standard mathematical constructs.

 | >  | (limit (lambda (x) (tan x)) (pi/2 -0/1)) => +1/0
 | >  | (limit (lambda (x) (tan x)) (pi/2 +0/1)) => -1/0
 | >  | 
 | >  | (+ 4. (/ (abs 0) 0)) => 4.0
 | >  | (limit (lambda (x) (+ 4. (/ (abs x) x))) (0 -0/1)) => 3.0
 | >  | (limit (lambda (x) (+ 4. (/ (abs x) x))) (0 +0/1)) => 5.0
 | > 
 | > LIMIT already handles these cases correctly.  But I am unconvinced
 | > that a procedure can automatically pick the evaluation points given no
 | > information about the test function.
 | 
 | - it seems fairly straight foreword to for +-0/1 to imply the use
 | of the smallest value representable by an implementation as the
 | delta value in it's calculation of a limit value its argument's
 | value?

That doesn't work in general.  Intermediate quantities in a
calculation can overflow or underflow if the delta is too small.

(define (func x) (expt (+ (/ x) (exp (/ x)) (exp (/ 2 x))) x))

;;The mathematically correct answer is e^2 = 7.3890560989306504:

(limit func 0 1/40)	==> 7.3890560989306504
(limit func 0 1/41)	==> #i0/0
(limit func 0 1/42)	==> #f
(limit func 0 1/43)	==> #i+/0
(limit func 0 1/444)	==> #i+/0
(limit func 0 1e-323)	==> #i+/0