A defensive numeric calculation can replace a tiny denominator before division.

Program

Play the program to choose a denominator and see whether the guard is used.

bounded_divide.f90
program bounded_divide_demo
    implicit none
    real :: numerator
    real :: raw_denominator
    real :: denominator
    real :: quotient
    integer :: used_floor

    numerator = 12.0
    raw_denominator = 
    denominator = raw_denominator
    used_floor = 0
    if (abs(denominator) < 1.0) then
        denominator = 1.0
        used_floor = 1
    end if
    quotient = numerator / denominator
    print '(F0.1, 1X, I0, 1X, F0.1)', raw_denominator, used_floor, quotient
end program bounded_divide_demo
program bounded_divide_demo
    implicit none
    real :: numerator
    real :: raw_denominator
    real :: denominator
    real :: quotient
    integer :: used_floor

    numerator = 12.0
    raw_denominator = 
    denominator = raw_denominator
    used_floor = 0
    if (abs(denominator) < 1.0) then
        denominator = 1.0
        used_floor = 1
    end if
    quotient = numerator / denominator
    print '(F0.1, 1X, I0, 1X, F0.1)', raw_denominator, used_floor, quotient
end program bounded_divide_demo
program bounded_divide_demo
    implicit none
    real :: numerator
    real :: raw_denominator
    real :: denominator
    real :: quotient
    integer :: used_floor

    numerator = 12.0
    raw_denominator = 
    denominator = raw_denominator
    used_floor = 0
    if (abs(denominator) < 1.0) then
        denominator = 1.0
        used_floor = 1
    end if
    quotient = numerator / denominator
    print '(F0.1, 1X, I0, 1X, F0.1)', raw_denominator, used_floor, quotient
end program bounded_divide_demo
guard `abs(denominator) < 1.0` detects a risky denominator.
floor The denominator is replaced with `1.0` only when the guard fires.
audit flag `used_floor` records whether the stabilized path was used.