years
is an
int
.
if (years >= 1 || years <= -1) {
if (years != 0) {
Break non-negative
distance
into two smaller numbers,
years
and
days
.
Bug:
days = 1;
should be
days = 0;
.
The last
continue
does nothing.
int days = 0; int years = 0; for (int i = 0; i > distance; --i) { if (days < 365) { ++days; continue; } days = 1; if (years < INT_MAX) { ++years; continue; } }
See the
remainder.C
we did on Monday, September 24.
int years = distance / 365; int days = distance % 365;
distance
is non-negative.
int days; switch (distance < 365) { case 1: days = distance; break; case 0: days = distance % 365; }
int days; //uninitialized variable if (distance < 365) { days = distance; } else { days = distance % 365; }
const int days = distance % 365;
int n, number = 0; int sum = 0; cout << "Enter number of integers, n, to sum: "; cin >> n; if (!cin) { cerr << "input failed\n"; return EXIT_FAILURE; } while (number <= n) { sum += number; ++number; } cout << "Sum: " << sum << "\n";
No reason to keep
number
alive after the loop is over.
And there’s no reason to add zero to
sum
.
cout << "Enter number of integers, n, to sum: "; int n; cin >> n; int sum = 0; for (int number = 1; number <= n; ++number) { sum += number; } cout << "Sum: " << sum << "\n";
Part 1.
Assume that
quotient
is non-negative.
Why doesn’t this catch overflow?
if (year + quotient > INT_MAX) {
To catch overflow, we can subtract
quotient
from both sides:
if (year > INT_MAX - quotient) {
Part 2.
Assume that
quotient
is negative.
Why doesn’t this catch underflow?
if (year + quotient < INT_MIN) {
To catch underflow, we can subtract
quotient
from both sides:
if (year < INT_MIN - quotient) {
Part 3. Catch overflow and underflow.
if (quotent >= 0) { if (year > INT_MAX - quotient) { cerr << "overflow\n"; } } else { if (year < INT_MIN - quotient) { cerr << "underflow\n"; } }
The following code does the same thing, but the above code is more symmetrical.
if (quotent >= 0) { if (year > INT_MAX - quotient) { cerr << "overflow\n"; } } else if (year < INT_MIN - quotient) { cerr << "underflow\n"; }