aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/lang/Float.java
blob: 63c6fa1e1841fb9d10863d75b95c84c61217abc0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* Copyright (C) 1998, 1999  Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */
 
package java.lang;

/**
 * @author Andrew Haley <aph@cygnus.com>
 * @date September 25, 1998.  
 */
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
 * "The Java Language Specification", ISBN 0-201-63451-1
 * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
 * Status:  Believed complete and correct.
 */

public final class Float extends Number
{
  public static final float MAX_VALUE = 3.4028235e+38f;
  public static final float MIN_VALUE = 1.4e-45f;
  public static final float NEGATIVE_INFINITY = -1.0f/0.0f;
  public static final float POSITIVE_INFINITY = 1.0f/0.0f;
  public static final float NaN = 0.0f/0.0f;

  // This initialization is seemingly circular, but it is accepted
  // by javac, and is handled specially by gcc.
  public static final Class TYPE = float.class;

  private float value;

  public Float (float value)
  {
    this.value = value;
  }

  public Float (double value)
  {
    this.value = (float)value;
  }

  public Float (String s) throws NumberFormatException
  {
    this.value = valueOf (s).floatValue ();
  }

  public String toString ()
  {
    return toString (value);
  }

  public boolean equals (Object obj)
  {
    if (obj == null)
      return false;

    if (!(obj instanceof Float))
      return false;

    Float f = (Float) obj;

    return floatToIntBits (value) == floatToIntBits (f.floatValue ());
  }

  public int hashCode ()
  {
    return floatToIntBits (value);
  }

  public int intValue ()
  {
    return (int) value;
  }

  public long longValue ()
  {
    return (long) value;
  }

  public float floatValue ()
  {
    return (float) value;
  }

  public double doubleValue ()
  {
    return (double) value;
  }

  public byte byteValue ()
  {
    return (byte) value;
  }

  public short shortValue ()
  {
    return (short) value;
  }

  public static String toString (float v)
  {
    return Double.toString ((double) v, true);
  } 

  public static Float valueOf (String s) throws NullPointerException, 
    NumberFormatException
  {
    if (s == null)
      throw new NullPointerException ();

    return new Float (Double.valueOf (s).floatValue ());
  }

  public boolean isNaN ()
  {
    return isNaN (value);
  }

  public static boolean isNaN (float v)
  {
    int bits = floatToIntBits (v);
    int e = bits & 0x7f800000;
    int f = bits & 0x007fffff;

    return e == 0x7f800000 && f != 0;
  }

  public boolean isInfinite ()
  {
    return isInfinite (value);
  }

  public static boolean isInfinite (float v)
  {
    int bits = floatToIntBits (v);
    int f = bits & 0x7fffffff;

    return f == 0x7f800000;
  }

  public static native int floatToIntBits (float value);

  public static native float intBitsToFloat (int bits);

}