Re: [boost] Infinite precision integer draft

----Original Message---- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Maarten Kronenburg Sent: 31 May 2006 21:25 To: boost@lists.boost.org Subject: Re: [boost] Infinite precision integer draft
This problem with unsigned_integer throwing an exception when negative is already apparent for the two expressions a-b and -a+b [presumably -b+a is intended] [snip]
a true unsigned infinite precision integer which may or may not throw exceptions in equivalent expressions
But those expressions are not equivalent for non-negative integers. a-b is defined as the value x such that b+x is equal to a. For non-negative integers that means a-b is only defined if a >= b. I would argue that -a is not really meaningful for non-negative integers, but the most obvious definition is that -a is the value x such that a+x = 0. That is only defined for a = 0 (and gives x=0). Thus your first expression is defined for any b <= a, whereas your second is only defined for b=0. non-negative integers are not the same as Z (but are still useful). -- Martin Bonner Martin.Bonner@Pitechnology.com Pi Technology, Milton Hall, Ely Road, Milton, Cambridge, CB4 6WZ, ENGLAND Tel: +44 (0)1223 203894

Martin, This problem is solved, see below: The arithmetic member operators returning integer by value are changed to non-virtual. The virtual integer & operator=( const integer & ); now has the following note: "Derived classes must override this member operator and use it to convert (temporary) objects of type integer back to the derived class." Also it is explained that the arithmetic non-member operators and the arithmetic member operators returning integer by value must call integer member functions and operators, not the derived ones. Now in expressions with unsigned_integer variables, temporary results can be negative. Only when a negative end-result is assigned, an exception will be thrown. So when a is 3 and b = 4, x = -a + b; will not throw an exception. Regards, Maarten. "Martin Bonner" <martin.bonner@pitechnology.com> wrote in message news:D997BF79D1E92C4793B7FCC04B4F90A555D1E0@pigeon.pi.local...
----Original Message---- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Maarten Kronenburg Sent: 31 May 2006 21:25 To: boost@lists.boost.org Subject: Re: [boost] Infinite precision integer draft
This problem with unsigned_integer throwing an exception when negative is already apparent for the two expressions a-b and -a+b [presumably -b+a is intended] [snip]
a true unsigned infinite precision integer which may or may not throw exceptions in equivalent expressions
But those expressions are not equivalent for non-negative integers.
a-b is defined as the value x such that b+x is equal to a.
For non-negative integers that means a-b is only defined if a >= b.
I would argue that -a is not really meaningful for non-negative integers, but the most obvious definition is that -a is the value x such that a+x = 0. That is only defined for a = 0 (and gives x=0).
Thus your first expression is defined for any b <= a, whereas your second is only defined for b=0.
non-negative integers are not the same as Z (but are still useful).
-- Martin Bonner Martin.Bonner@Pitechnology.com Pi Technology, Milton Hall, Ely Road, Milton, Cambridge, CB4 6WZ, ENGLAND Tel: +44 (0)1223 203894 _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
participants (2)
-
Maarten Kronenburg
-
Martin Bonner