I was writing a program to calculate "Pythagorean triples" recursively, and ran into a problem.  Here's the program:<div><br></div><div><div>MODULE PyTriples EXPORTS Main;</div><div><br></div><div>IMPORT IO, Fmt;</div>
<div><br></div><div>VAR tcnt, pcnt, max, i: LONGINT;</div><div><br></div><div>PROCEDURE NewTriangle(a, b, c: LONGINT; VAR tcount, pcount: LONGINT) =</div><div>  VAR perim := a + b + c;      </div><div>  BEGIN</div><div>    IF perim <= max THEN</div>
<div>      pcount := pcount + 1L;</div><div>      tcount := tcount + max DIV perim;</div><div>      NewTriangle(a-2L*b+2L*c, 2L*a-b+2L*c, 2L*a-2L*b+3L*c, tcount, pcount);</div><div>      NewTriangle(a+2L*b+2L*c, 2L*a+b+2L*c, 2L*a+2L*b+3L*c, tcount, pcount);</div>
<div>      NewTriangle(2L*b+2L*c-a, b+2L*c-2L*a, 2L*b+3L*c-2L*a, tcount, pcount);</div><div>    END;</div><div>  END NewTriangle;</div><div><br></div><div>BEGIN</div><div>i := 100L;</div><div><br></div><div>REPEAT</div><div>
  max := i;</div><div>  tcnt := 0L;</div><div>  pcnt := 0L;</div><div>  NewTriangle(3L, 4L, 5L, tcnt, pcnt);</div><div>  IO.Put(Fmt.LongInt(i) & ": " & Fmt.LongInt(tcnt) & " Triples, " &</div>
<div>    Fmt.LongInt(pcnt) & " Primitives\n");</div><div>  i := i * 10L;</div><div>UNTIL i = 10000000L;</div><div><br></div><div>END PyTriples.</div></div><div><br></div><div>This outputs:</div><div><br></div>
<div><div>100: 17 Triples, 7 Primitives</div><div>1000: 325 Triples, 70 Primitives</div><div>10000: 0858 Triples, 703 Primitives</div><div>100000: 40701 Triples, 7024 Primitives</div><div>1000000: 808950 Triples, 70229 Primitives</div>
</div><div><br></div><div>However, if I just use INTEGER on a 64 bit machine, I get the proper output:</div><div><br></div><div><div>100: 17 Triples, 7 Primitives</div><div>1000: 325 Triples, 70 Primitives</div><div>10000: 4858 Triples, 703 Primitives</div>
<div>100000: 64741 Triples, 7026 Primitives</div><div>1000000: 808950 Triples, 70229 Primitives</div></div><div><br></div><div>Note how 10000 and 100000 are different. The code is literally exactly the same, only with LONGINT replaced by INTEGER.</div>
<div><br></div>