Было бы намного лучше просто обойти все недиагональные элементы и проверить, близки ли они к нулю (сравнение числа с плавающей точкой для неравенства склонно к ошибкам округления и может привести к ошибочным результатам).
Во-первых, как только вы найдете какой-либо нарушающий элемент, вы можете немедленно прекратить обход, и это может позволить значительно сократить время, если типичны нарушающие матрицы.
Во-вторых, это потенциально позволило бы улучшить развертывание цикла компилятором (компиляторы Fortran известны хорошими стратегиями оптимизации) и ускорить выполнение на кристалле благодаря меньшему количеству межинструкционных зависимостей.
Добавьте к этому тот факт, что предложенный вами алгоритм склонен к переполнению и накоплению ошибок, а алгоритм "traverse-and-test" - нет.