Data Type Java

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 * 

Provides extra functionality for Java Number classes.


 *
 * @author Rand McNeely
 * @author Stephen Colebourne
 * @author Steve Downey
 * @author Eric Pugh
 * @author Phil Steitz
 * @author Matthew Hawthorne
 * @author Gary Gregory
 * @author Fredrik Westermarck
 * @since 2.0
 * @version $Id: NumberUtils.java 609475 2008-01-06 23:58:59Z bayard $
 */
public class Main {
  
  /**
   * 

Compares two floats for order.


   *
   * 

This method is more comprehensive than the standard Java greater than,
   * less than and equals operators.


   * 

       *  
  • It returns -1 if the first value is less than the second.
       *  
  • It returns +1 if the first value is greater than the second.
       *  
  • It returns 0 if the values are equal.
       * 

   *
   * 

 The ordering is as follows, largest to smallest:
   * 


       * 
  • NaN
       * 
  • Positive infinity
       * 
  • Maximum float
       * 
  • Normal positive numbers
       * 
  • +0.0
       * 
  • -0.0
       * 
  • Normal negative numbers
       * 
  • Minimum float (-Float.MAX_VALUE)
       * 
  • Negative infinity
       * 

   *
   * 

Comparing NaN with NaN will return
   * 0.


   * 
   * @param lhs  the first float
   * @param rhs  the second float
   * @return -1 if lhs is less, +1 if greater,
   *  0 if equal to rhs
   */
  public static int compare(float lhs, float rhs) {
      if (lhs < rhs) {
          return -1;
      }
      if (lhs > rhs) {
          return +1;
      }
      //Need to compare bits to handle 0.0 == -0.0 being true
      // compare should put -0.0 < +0.0
      // Two NaNs are also == for compare purposes
      // where NaN == NaN is false
      int lhsBits = Float.floatToIntBits(lhs);
      int rhsBits = Float.floatToIntBits(rhs);
      if (lhsBits == rhsBits) {
          return 0;
      }
      //Something exotic! A comparison to NaN or 0.0 vs -0.0
      //Fortunately NaN's int is > than everything else
      //Also negzeros bits < poszero
      //NAN: 2143289344
      //MAX: 2139095039
      //NEGZERO: -2147483648
      if (lhsBits < rhsBits) {
          return -1;
      } else {
          return +1;
      }
  }
}