У меня недостаточно комментариев для комментариев, поэтому я буду «отвечать» на предложение Рика Томпсона для тестирования бесконечности.
if (A-1 .eq. A)
Это также верно, если A - очень большое число с плавающей запятой, а 1
ниже точности A.
Простой тест:
subroutine test_inf_1(A)
real, intent(in) :: A
print*, "Test (A-1 == A)"
if (A-1 .eq. A) then
print*, " INFINITY!!!"
else
print*, " NOT infinite"
endif
end subroutine
subroutine test_inf_2(A)
real, intent(in) :: A
print*, "Test (A > HUGE(A))"
if (A > HUGE(A)) then
print*, " INFINITY!!!"
else
print*, " NOT infinite"
endif
end subroutine
program test
real :: A,B
A=10
print*, "A = ",A
call test_inf_1(A)
call test_inf_2(A)
print*, ""
A=1e20
print*, "A = ",A
call test_inf_1(A)
call test_inf_2(A)
print*, ""
B=0.0 ! B is necessary to trick gfortran into compiling this
A=1/B
print*, "A = ",A
call test_inf_1(A)
call test_inf_2(A)
print*, ""
end program test
выходов:
A = 10.0000000
Test (A-1 == A)
NOT infinite
Test (A > HUGE(A))
NOT infinite
A = 1.00000002E+20
Test (A-1 == A)
INFINITY!!!
Test (A > HUGE(A))
NOT infinite
A = Infinity
Test (A-1 == A)
INFINITY!!!
Test (A > HUGE(A))
INFINITY!!!
Я предполагаю, что вы пытаетесь вернуть переменную $ second. Вы возвращаете переменную с именем 'secondlast'. Попробуйте изменить имя переменной на $ secondlast.
Чтобы вернуть вторую последнюю запись из резервной модели, следующий запрос должен работать при условии, что ваш первичный ключ - «id»:
Backup::orderBy('id', 'desc')
->skip(1)
->take(1)
->first();