c – Nested for loop, run series 10000 times
You have an integer overflow. Look, you define f
as int
int i, f = 1;
and f
grows fast and became huge, at the end it must have been (19!)^10000
(a quite big 19!
raised into 10000
power); however, int
value can not be greater than 2^31 - 1
, and so the integer overflow comes (you can get negative values, then positive one, zero).
When i == 18
, j == 1
it appears, that f == 0
and from now you have
// when i == 18, j = 1 we have f == 0 due to integer overflow
calculation += 1.00 / f;
equals to infinity.
Quick amendment is to declare f
being float
:
int i;
float f = 1.0;
The computation is still ineffcient, but the calculation
is now valid.
calculation == 1.7182816
Edit: note, that f
grows fast, at j = 2
, i = 8
we have f == infinity
. From now on we start doing nothing:
1.00 / infinity == 0
and that’s why
calculation += 1.00 / f;
equals to
calculation += 0;
We can well rewrite
// we don't want add 0 9997 times
for(int j=0; j<=10000; j++) ...
into (all we want is at most 4
outer loops instead of 10000
)
for(int j=0; j<=3; j++) ...
Read more here: Source link