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.