[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