blob: 70cb33ef4a20c2cd6923139a3c5979add27ef9b7 (
plain) (
blame)
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
|
package java.lang
/* This is a hijacked class. Its instances are primitive numbers.
* Constructors are not emitted.
*/
final class Float private () extends Number with Comparable[Float] {
def this(value: scala.Float) = this()
def this(s: String) = this()
@inline def floatValue(): scala.Float =
this.asInstanceOf[scala.Float]
@inline override def byteValue(): scala.Byte = floatValue.toByte
@inline override def shortValue(): scala.Short = floatValue.toShort
@inline def intValue(): scala.Int = floatValue.toInt
@inline def longValue(): scala.Long = floatValue.toLong
@inline def doubleValue(): scala.Double = floatValue.toDouble
override def equals(that: Any): scala.Boolean = that match {
case that: Double => // yes, Double
val a = doubleValue
val b = that.doubleValue
(a == b) || (Double.isNaN(a) && Double.isNaN(b))
case _ =>
false
}
// Uses the hashCode of Doubles. See Bits.numberHashCode for the rationale.
@inline override def hashCode(): Int =
scala.scalajs.runtime.Bits.numberHashCode(doubleValue)
@inline override def compareTo(that: Float): Int =
Float.compare(floatValue, that.floatValue)
@inline override def toString(): String =
Float.toString(floatValue)
@inline def isNaN(): scala.Boolean =
Float.isNaN(floatValue)
@inline def isInfinite(): scala.Boolean =
Float.isInfinite(floatValue)
}
object Float {
final val TYPE = classOf[scala.Float]
final val POSITIVE_INFINITY = 1.0f / 0.0f
final val NEGATIVE_INFINITY = 1.0f / -0.0f
final val NaN = 0.0f / 0.0f
final val MAX_VALUE = scala.Float.MaxValue
final val MIN_VALUE = scala.Float.MinPositiveValue
final val MAX_EXPONENT = 127
final val MIN_EXPONENT = -126
final val SIZE = 32
@inline def valueOf(floatValue: scala.Float): Float = new Float(floatValue)
@inline def valueOf(s: String): Float = valueOf(parseFloat(s))
@inline def parseFloat(s: String): scala.Float =
Double.parseDouble(s).toFloat
@inline def toString(f: scala.Float): String =
"" + f
def compare(a: scala.Float, b: scala.Float): scala.Int = {
// NaN must equal itself, and be greater than anything else
if (isNaN(a)) {
if (isNaN(b)) 0
else 1
} else if (isNaN(b)) {
-1
} else {
if (a == b) 0
else if (a < b) -1
else 1
}
}
@inline protected def equals(a: scala.Float, b: scala.Float): scala.Boolean =
a == b || (isNaN(a) && isNaN(b))
@inline def isNaN(v: scala.Float): scala.Boolean =
v != v
@inline def isInfinite(v: scala.Float): scala.Boolean =
v == POSITIVE_INFINITY || v == NEGATIVE_INFINITY
@inline def intBitsToFloat(bits: scala.Int): scala.Float =
scala.scalajs.runtime.Bits.intBitsToFloat(bits)
@inline def floatToIntBits(value: scala.Float): scala.Int =
scala.scalajs.runtime.Bits.floatToIntBits(value)
}
|