[Openmcl-devel] roundings...

Joakim Sandgren joakim at joakimsandgren.com
Sat Sep 8 14:09:22 PDT 2012


interesting!
what I understand is that the :zero mode then equals to floor...?
and that :negative mode does the same (?)
and that the :positive mode equals to ceiling.?

one could have a mode that rounds upwards from .5...

joakim

Le 8 sept. 2012 à 22:02, Gary Byers <gb at clozure.com> a écrit :

> I'd parsed the original question as asking how to change the rounding
> mode used by the hardware, in which case section 4.11 of the CCL manual
> would be suggested reading.
> 
> CCL defaults to using "round to nearest [even number]" and IIRC C defaults
> to "round towards 0", so things like (ROUND 1.5) will yield different results than the C equivalent.
> 
> ? (get-fpu-mode :rounding-mode)
> :NEAREST
> ? (round 1.5)
> 2
> -0.5
> ? (set-fpu-mode :rounding-mode :zero)
> 14592
> ? (round 1.5)
> 1
> 0.5
> ?
> 
> 
> On Fri, 7 Sep 2012, Bill St. Clair wrote:
> 
>> Joakim,
>> 
>> Please send an example of a .5 case that doesn't round to the even number.
>> 
>> Your example is running into the limit of resolution of single floats.
>> 5.4999999 IS 5.5, so it rounds to 6:
>> 
>> CL-USER> 5.4999999
>> 5.5
>> CL-USER> (round *)
>> 6
>> -0.5
>> CL-USER> (= 5.4999999 (+ 5 1/2))
>> T
>> CL-USER> 5.4999999d0
>> 5.4999999D0
>> CL-USER> (round *)
>> 5
>> 0.4999998999999997D0
>> 
>> Note the rounding error in the final result. Almost, but not quite
>> 0.4999999 . So it is with floats. If you need precise math, use
>> RATIONALs (INTEGERs and RATIOs).
>> 
>> If your C code works differently, are you sure you're using single
>> floats there? May I see it?
>> 
>> -Bill
>> 
>> On Fri, Sep 7, 2012 at 4:30 AM, Joakim Sandgren
>> <joakim at joakimsandgren.com> wrote:
>>> Hi,
>>> 
>>> how can I do a more 'c-like' rounding in lisp ?
>>> that is in the .5 cases not always go to the even number.
>>> i would like to have it to round up
>>> and perhaps have better float resolution ? in lisp: (round 5.499999) => 5 (round 5.4999999) => 6
>>> 
>>> 
>>> 
>>> are there some way around this?
>>> 
>>> sincerely
>>> joakim
>>> 
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Openmcl-devel mailing list
>>> Openmcl-devel at clozure.com
>>> http://clozure.com/mailman/listinfo/openmcl-devel
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
>> 
>> 
> 




More information about the Openmcl-devel mailing list