1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
9 var inf
= float64frombits(0x7FF0000000000000)
11 // isNaN reports whether f is an IEEE 754 ``not-a-number'' value.
12 func isNaN(f
float64) (is
bool) {
13 // IEEE 754 says that only NaNs satisfy f != f.
17 // isFinite reports whether f is neither NaN nor an infinity.
18 func isFinite(f
float64) bool {
22 // isInf reports whether f is an infinity.
23 func isInf(f
float64) bool {
24 return !isNaN(f
) && !isFinite(f
)
27 // Abs returns the absolute value of x.
32 func abs(x
float64) float64 {
34 return float64frombits(float64bits(x
) &^ sign
)
37 // copysign returns a value with the magnitude
38 // of x and the sign of y.
39 func copysign(x
, y
float64) float64 {
41 return float64frombits(float64bits(x
)&^sign |
float64bits(y
)&sign
)
44 // Float64bits returns the IEEE 754 binary representation of f.
45 func float64bits(f
float64) uint64 {
46 return *(*uint64)(unsafe
.Pointer(&f
))
49 // Float64frombits returns the floating point number corresponding
50 // the IEEE 754 binary representation b.
51 func float64frombits(b
uint64) float64 {
52 return *(*float64)(unsafe
.Pointer(&b
))