public static double nextDown(final double start){
  if (start > Double.NEGATIVE_INFINITY) {
    if (start == 0.0) {
      return -Double.MIN_VALUE;
    }
    final long bits=Double.doubleToRawLongBits(start);
    return Double.longBitsToDouble(bits + (bits > 0 ? -1 : 1));
  }
 else   if (start == Double.NEGATIVE_INFINITY) {
    return Double.NEGATIVE_INFINITY;
  }
 else {
    return start;
  }
}

public static double nextDown ( final double start ) { if ( start > Double . NEGATIVE_INFINITY ) { if ( start == 0.0 ) { return - Double . MIN_VALUE ; } final long bits = Double . doubleToRawLongBits ( start ) ; return Double . longBitsToDouble ( bits + ( bits > 0 ? - 1 : 1 ) ) ; } else if ( start == Double . NEGATIVE_INFINITY ) { return Double . NEGATIVE_INFINITY ; } else { return start ; } }
semantically equivalent to nextafter ( start , double . negative_infinity ) .
