From: Phil Endecott (spam_from_boost_dev_at_[hidden])
Date: 2007-04-18 18:15:07
I have recently written some code for fixed point arithmetic which I
would be happy to contribute to Boost, if it is considered worthy.
Please let me know if this is something that you would use, especially
if you would be able to help with testing on platforms other than Linux
and other tasks necessary for Boostification. Here's a very quick summary:
You declare a fixed-point variable by specifying the number of
whole-number bits and the number of fraction bits, e.g.
This has a range of about -256 to +256 with a precision of 1/(2^23),
and occupies 32 bits. boost::integer is used to choose an
implementation type with sufficient bits. The usual arithmetic
operators are implemented with some help from boost::operators, and
should have no overhead; note that overflow is not detected (like the
built-in integral types).
Implicit conversions are provided to and from the built-in integral and
floating-point types (well, actually I have only added the ones that I
have needed; the others should only need copy&paste). Implicit
conversion between fixed types of different sizes is also possible.
I'm starting to think that perhaps I should make some of these
conversion explicit: I worry that code using this might be doing an
"invisible" conversion via a floating point type that I didn't want.
Any thoughts about this would be appreciated.
Operations between fixed-point values of different sizes are possible,
and return a fixed-point value with sufficient bits to store the
result. For example:
c = a + b;
..except that actually one more bit is needed in the maximum-value
case. There are no doubt more opportunities for refinement in this area.
You can see the code here:
Thanks for your attention.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk