I would like to add x to y (where y is an attribute of class A)
void A::f1(char x)
{
y += x;
}
However, there is a risk of overflow. I think (I have not tested them) the following two functions should prevent any overflow however they seem very uselessly complicated (and not very fast for the concern of f3).
void A::f2(char x)
{
if (x > 0)
{
if (CHAR_MAX - x < y)
{
y = CHAR_MAX;
} else if (CHAR_MIN + x > y)
{
y = CHAR_MIN;
} else
{
y += x;
}
} else
{
if (CHAR_MAX + x < y)
{
y = CHAR_MAX;
} else if (CHAR_MIN - x > y)
{
y = CHAR_MIN;
} else
{
y += x;
}
}
}
void A::f3(char x)
{
if (x < 0)
{
for (int i = 0 ; i < x;i++)
{
if (y == CHAR_MIN)
{
break;
}
y--;
}
} else
{
for (int i = 0 ; i < x;i++)
{
if (y == CHAR_MAX)
{
break;
}
y++;
}
}
}
Is there a better solution?