code: def next_down(x, context=None):
      
      x = BigFloat._implicit_convert(x)
      # make sure we don't alter any flags
      with _saved_flags():
          with (context if context is not None else EmptyContext):
              with RoundTowardNegative:
                  # nan maps to itself
                  if is_nan(x):
                      return +x
  
                  # round to current context; if value changes, we're done
                  y = +x
                  if y != x:
                      return y
  
                  # otherwise apply mpfr_nextabove
                  bf = y.copy()
                  mpfr.mpfr_nextbelow(bf)
                  # apply + one more time to deal with subnormals
                  return +bf
docs: next_down(x): return the greatest representable float that's
      strictly less than x.
  
      This operation is quiet:  flags are not affected.