Boost logo

Boost :

Subject: Re: [boost] safe integer library -- the scope
From: Robert Ramey (ramey_at_[hidden])
Date: 2015-12-14 11:03:19


On 12/14/15 12:31 AM, Andrzej Krzemienski wrote:
> While I do agree with your point of view, I do not agree with the choice of
> the example. I would say that the problem here comes from the fact that
> that an unsigned type is used for anything else but a bit-set. To fix it,
> and to avoid such problems in the future, one does not necessarily have to
> use a library, but simply apply the rule "never use unsigned to represent
> integer numbers, even the positive ones".

My library does not purport to "fix" any problems - only detect them. So
you might think of my library as a way to detect violations in your
rules. I don't see anything in the library which would have to be
changed in order to serve your stated purpose.

> And it would work for some time, until I start playing with bigger numbers:
>
> int main(){
> int8_t x = 100;
> int y = x * x;
> std::cout << y << std::endl;
>
> int z1 = 1000000000;
> int z2 = 1000000000;
> auto y2 = z1 * z2; // overflow
> std::cout << y2 << std::endl;
>
> return 0;
> }
>
> And at this point I need safe<int>

well, feel free to use it!

(or a BigInt).

Which to me is an entirely different thing for a different purpose.

The main purpose of the safe numeric library is to reconcile the
conflict between what people expect when they see an arithmetic
expression and what current computer languages actually do.

BigInt - or John Maddox's multi-precision numerics address an entirely
different concern. C++ doesn't support arbitrarily large numbers and
those libraries do.

You could say that all libraries also address the confict - but they do
so in a very different way. So one or the other is a better choice
depending on the purpose to which they are to be used. These libraries
complement each other.

Robert Ramey


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk