URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [math/] [bits.go] - Rev 747
Compare with Previous | Blame | View Log
// Copyright 2009 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package mathconst (uvnan = 0x7FF0000000000001uvinf = 0x7FF0000000000000uvneginf = 0xFFF0000000000000mask = 0x7FFshift = 64 - 11 - 1bias = 1023)// Inf returns positive infinity if sign >= 0, negative infinity if sign < 0.func Inf(sign int) float64 {var v uint64if sign >= 0 {v = uvinf} else {v = uvneginf}return Float64frombits(v)}// NaN returns an IEEE 754 ``not-a-number'' value.func NaN() float64 { return Float64frombits(uvnan) }// IsNaN returns whether f is an IEEE 754 ``not-a-number'' value.func IsNaN(f float64) (is bool) {// IEEE 754 says that only NaNs satisfy f != f.// To avoid the floating-point hardware, could use:// x := Float64bits(f);// return uint32(x>>shift)&mask == mask && x != uvinf && x != uvneginfreturn f != f}// IsInf returns whether f is an infinity, according to sign.// If sign > 0, IsInf returns whether f is positive infinity.// If sign < 0, IsInf returns whether f is negative infinity.// If sign == 0, IsInf returns whether f is either infinity.func IsInf(f float64, sign int) bool {// Test for infinity by comparing against maximum float.// To avoid the floating-point hardware, could use:// x := Float64bits(f);// return sign >= 0 && x == uvinf || sign <= 0 && x == uvneginf;return sign >= 0 && f > MaxFloat64 || sign <= 0 && f < -MaxFloat64}// normalize returns a normal number y and exponent exp// satisfying x == y × 2**exp. It assumes x is finite and non-zero.func normalize(x float64) (y float64, exp int) {const SmallestNormal = 2.2250738585072014e-308 // 2**-1022if Abs(x) < SmallestNormal {return x * (1 << 52), -52}return x, 0}
