transparent INF - does it exist

c/- All: In taking a holistic look at some of the work I do, I've come to realize a need for a "transparent" data type, and wondering whether or not it exists. As all of you would have experienced, any organization has such a representation of such a type; be it called: "Null value", "Missing value", "Fill value", "Infinity" , or whatever. What I am hoping for is support for such an representation, with existing containers and algorithms; such that if you perform any mathematical operation, (arithmetic, transcendental; inverse; anything really ...); that you get back the *same* object (ie. it passes transparently through any operation), and not raise any exception if you so choose. Example: missing_val == atan(missing_val) - missing_val; missing_val == 1 / missing_val; missing_val == missing_val + missing_val; missing_val == missing_val - missing_val; typedef std::vector<any_type> dVec; dVec some_vector; ... populate some_vector ... dVec::iterator = some_vector.find(missing_val); Boosters, do we have such a representation; is there value in having such a thing in Boost; is there a (simple) alternative work-around ?? All ideas and comments appreciated. Cheers, -- Manfred MetOcean Engineers

On Mon, 15 Nov 2004 10:35:35 +0800, Manfred Doudar wrote
c/- All:
In taking a holistic look at some of the work I do, I've come to realize a need for a "transparent" data type, and wondering whether or not it exists.
As all of you would have experienced, any organization has such a representation of such a type; be it called:
"Null value", "Missing value", "Fill value", "Infinity" ,
or whatever.
What I am hoping for is support for such an representation, with existing containers and algorithms; such that if you perform any mathematical operation, (arithmetic, transcendental; inverse; anything really ...); that you get back the *same* object (ie. it passes transparently through any operation), and not raise any exception if you so choose.
Example:
missing_val == atan(missing_val) - missing_val; missing_val == 1 / missing_val; missing_val == missing_val + missing_val; missing_val == missing_val - missing_val;
typedef std::vector<any_type> dVec; dVec some_vector;
... populate some_vector ...
dVec::iterator = some_vector.find(missing_val);
Boosters, do we have such a representation; is there value in having such a thing in Boost; is there a (simple) alternative work-around ??
In date-time there is a template called int_adapter in the implementation that lets you have nan, infinities, etc in an integer value type. I think this is something like what you are trying to do. Basically it steals some values from the integer type and treats them as special then overrides the operators accordingly. We use this to implement operations on date-time special values like not-a-date-time. See boost/date_time/int_adapter and libs/date_time/test/testint_adapter.cpp for details. HTH, Jeff

Thanks Jeff, I take a look down that path Cheers, -- Manfred MetOcean Engineers Jeff Garland wrote:
On Mon, 15 Nov 2004 10:35:35 +0800, Manfred Doudar wrote
c/- All:
In taking a holistic look at some of the work I do, I've come to realize a need for a "transparent" data type, and wondering whether or not it exists.
As all of you would have experienced, any organization has such a representation of such a type; be it called:
"Null value", "Missing value", "Fill value", "Infinity" ,
or whatever.
What I am hoping for is support for such an representation, with existing containers and algorithms; such that if you perform any mathematical operation, (arithmetic, transcendental; inverse; anything really ...); that you get back the *same* object (ie. it passes transparently through any operation), and not raise any exception if you so choose.
Example:
missing_val == atan(missing_val) - missing_val; missing_val == 1 / missing_val; missing_val == missing_val + missing_val; missing_val == missing_val - missing_val;
typedef std::vector<any_type> dVec; dVec some_vector;
... populate some_vector ...
dVec::iterator = some_vector.find(missing_val);
Boosters, do we have such a representation; is there value in having such a thing in Boost; is there a (simple) alternative work-around ??
In date-time there is a template called int_adapter in the implementation that lets you have nan, infinities, etc in an integer value type. I think this is something like what you are trying to do. Basically it steals some values from the integer type and treats them as special then overrides the operators accordingly. We use this to implement operations on date-time special values like not-a-date-time.
See boost/date_time/int_adapter and libs/date_time/test/testint_adapter.cpp for details.
HTH,
Jeff _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
participants (2)
-
Jeff Garland
-
Manfred Doudar