Groveler and HUGE_VAL

Martin Simmons martin at lispworks.com
Fri Apr 26 14:25:06 UTC 2013


>>>>> On Thu, 25 Apr 2013 20:55:38 -0600, Zach  said:
> 
> > (constant (+huge-val+ "HUGE_VAL") :type integer)
> >
> > then
> >
> > (with-foreign-object (huge-ptr :uint64)
> >    (setf (mem-ref huge-ptr :uint64) +huge-val+)
> >   (nlopt-set-lower-bound opts huge-ptr))
> 
> I have also been thinking along these lines.  The only thing I worry about
> is whether this is strictly correct or just correct in practice.  Is there
> a guarantee that a double float is always the same size as a uint64.  It's
> true on every platform I have ever programmed for (I think), but will it
> always be true?  Back when I programmed in C more often, hard coding data
> type sizes into a program just seemed wrong so I didn't do it, so I guess I
> wouldn't know.  Perhaps I am sweating a non-issue...

That's not the only problem -- on some platforms, HUGE_VAL is not a
compile-time constant.  It looks like the only portable way to get the value
is to write a C helper function to return it.

-- 
Martin Simmons
LispWorks Ltd
http://www.lispworks.com/



More information about the cffi-devel mailing list