def normalise_error_asymptotic(absolute_error: float, scaling_factor: float) -> float:
    """
    Given an error in the interval [0, +inf], returns a normalised error in [0, 1]

    The normalised error asymptotically approaches 1 as absolute_error -> +inf.

    The parameter scaling_factor is used to scale for magnitude.
    When absolute_error == scaling_factor, the normalised error is equal to 0.5
    """
    if absolute_error < 0:
        raise ValueError(f'Error to be normalised must be non-negative '
                         f': {absolute_error}')
    scaled_error = absolute_error / scaling_factor
    return scaled_error / (scaled_error + 1)