Я заинтригован следующим утверждением, найденным в документации метода System.nanoTime() в Java:
long t0 = System.nanoTime();
...
long t1 = System.nanoTime();
Следует использовать t1 - t0 < 0
, а не t1 < t0
из-за возможности числового переполнения.
Источник: http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()
Почему t1 < t0
может "переполниться"? Это есть в Javadocs, но я думаю, что это применимо к любому языку.