Hi! Pierangelo Masarati wrote:
Looking at recent CLN stuff, I see that the internal representation of any type of data is a word, which is basically a "cl_uint" (in cln/object.h: typedef uintP cl_uint; // This ought to be called `cl_word'. where typedef unsigned long uintP; :) It doesn't really care about signedness until the value is extracted and shifted back to its position.
Correct.
I haven't looked into CLN's CVS yet, though, but this looks like something that shouldn't change quite often.
Correct.
However, since applications using CLN shouldn't be aware of those details, I'm getting convinced that the optimization you're trying to obtain in numeric.cpp should actually be moved to CLN, in the sense that being CLN a likely candidate as a building block for higher-level numerical libraries (like GiNaC, for example), it should provide means for safe and efficient machine and OS independent conversion between its internal representation and built-in types. Details about how to implement it are beyond the scope of this message; it could be by providing standard limits for the builtin types (like INT_MAX, UNIT_MAX and so in limits.h) or a test (sort of SAFE_CAST_TO_INT(x), SAFE_CAST_TO_UINT(x) and similar) or so.
This is documented in chapter 3.4 "Conversions". Cheers -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/>