code: public static double nextDown(float f) {
          if( isNaN(f) || f == Float.NEGATIVE_INFINITY)
              return f;
          else {
              if (f == 0.0f)
                  return -Float.MIN_VALUE;
              else
                  return Float.intBitsToFloat(Float.floatToRawIntBits(f) +
                                              ((f > 0.0f)?-1:+1));
          }
      }
docs: Returns the floating-point value adjacent to {@code f} in
  the direction of negative infinity.  This method is
  semantically equivalent to {@code nextAfter(f,
  Float.NEGATIVE_INFINITY)}; however, a
  {@code nextDown} implementation may run faster than its
  equivalent {@code nextAfter} call.
  
  <p>Special Cases:
  <ul>
  <li> If the argument is NaN, the result is NaN.
  
  <li> If the argument is negative infinity, the result is
  negative infinity.
  
  <li> If the argument is zero, the result is
  {@code -Float.MIN_VALUE}
  
  </ul>
  
  @param f  starting floating-point value
  @return The adjacent floating-point value closer to negative
  infinity.
  @author Joseph D. Darcy