В Swift 4.2 следующее не возвращает ноль, даже если строка не соответствует шаблону:
string.range(of: regex, options: .regularExpression, range: nil, locale: nil)
Как предполагает XCode:
Сравнение необязательного значения типа 'NSRange' (он же '_NSRange') с nil всегда возвращает true
Поэтому в итоге я использовал:
if string.range(of: regex, options: .regularExpression)
.location != NSNotFound {
// do stuff if string matches regexp
}
Поиск в матрице ненулевых значений
logical :: not_diag
integer :: i, j
not_diag = .false.
outer: do i = 2, size(A,1)
do j = i, size(A, 2)
if (A(i,j) > PRECISION) then
not_diag = .true.
exit outer
end if
end
end outer
if (not_diag) then
! DO LDL' decomposition
end if
Чтобы использовать подпрограммы LAPACK с двойной точностью, замените первые буквы «s» на «d». Так spotrf становится dpotrf
Гораздо лучше было бы просто просмотреть все off -диагональные элементы и проверьте, близки ли они к нулю (сравнение числа с плавающей запятой на предмет неравенства подвержено ошибкам округления и может привести к ошибочным результатам).
Во-первых, как только вы обнаружите какой-либо нарушающий элемент, вы можете немедленно прекратить обход, и это может позволить значительно сократить время, если нарушающие матрицы являются типичными.
Во-вторых,