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

*To*: smh@franz.com*Subject*: decode-float, Infs, signed zeros..*From*: fateman@peoplesparc.Berkeley.EDU (Richard Fateman)*Date*: Mon, 20 Apr 1992 12:39:47 -0400*Cc*: allegro-cl@peoplesparc.Berkeley.EDU, fateman@peoplesparc.Berkeley.EDU, nmichael@peoplesparc.Berkeley.EDU

Consider the values inf = #.EXCL::*INFINITY-DOUBLE* minf = (- inf) then (decode-float inf) gives an error. (/ 1 minf) and (/ 1 inf) both print as 0.0d0. But decode-float shows they have different signs. The signum function does not notice this, however. Also note that if the reader encounters -0.0d0 it produces a Positive zero, not the same as (* -1 0.0d0). Probably most people would think signum is the same as .. (defun newsignum(x)(multiple-value-bind (a b sign) (decode-float x) sign)) but it isn't. Also, some other problems: (/ 1.0d0 0.0d0) seems to inevitably signal an error. Is there any way to make it return inf? Catching it with an errorset is not particularly informative as to what caused the problem. (/ 1.0d-200 1.0d200) gives 0.0d0, no underflow message (/ 1.0e-200 1.0e200) gives ... Error: This integer is too large to be converted to single float: 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Is this all viewed as correct in the Common Lisp world? If so, it makes it hard to do certain things neatly, including interval arithmetic. Thanks RJF

- Prev by Date:
**Epoch 4.0 and the emacs-lisp interface** - Next by Date:
**Sample CLIM interface code request** - Previous by thread:
**Epoch 4.0 and the emacs-lisp interface** - Next by thread:
**Sample CLIM interface code request** - Index(es):