On 5/13/11 1:01 PM, Timon Gehr wrote:
On 5/13/11 3:25 AM, Timon Gehr wrote:
On p368 the CheckedInt struct does not check for overflow in the unary minus
operator.

Unary minus never overflows. That being said, there is the oddity that
-x is x when x == int.min. Even in that case there is no loss of
information.

Andrei

This behavior is caused by _overflow_ when the error condition that is checked 
in
++ is overflow:

auto x=CheckedInt(int.min);
x=-x; //passes

x=~x;
x++;//throws

Not sure I understand the point here. I do agree that this may be confusing and also that it's reasonable to check against int.min in unary minus.

Also, the statement that there is no loss of information is just wrong:

scanf("%d %d %d",&n_,&m_);
auto n=CheckedInt!int(n_),m=CheckedInt!int(m_);
enforce(n>0&&  m<0, "provide meaningful input!");
foreach(i;0..n) m=-m;
writeln(n," is"~(m<0?"odd":"even")); //disaster strikes!

Depends on how one defines "information". I meant it simply as state available to the program.


Andrei

Reply via email to