diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2019-02-21 17:07:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-21 17:07:48 +0100 |
commit | af922fb2c6baceb89cc8e4acd6d84a6474b32dda (patch) | |
tree | b986c985c9f30f52279c9e265ce67c25b20c0a0d /vendor/github.com/vbauerster/mpb/internal/round.go | |
parent | 28d6eeb57a46b8df8960cff6bf6748c4611b61ef (diff) | |
parent | c069d117594d72159157aa48d0693d8571be45c5 (diff) | |
download | podman-af922fb2c6baceb89cc8e4acd6d84a6474b32dda.tar.gz podman-af922fb2c6baceb89cc8e4acd6d84a6474b32dda.tar.bz2 podman-af922fb2c6baceb89cc8e4acd6d84a6474b32dda.zip |
Merge pull request #2394 from vrothberg/vendor-image-v1.4
vendor containers/image v1.4
Diffstat (limited to 'vendor/github.com/vbauerster/mpb/internal/round.go')
-rw-r--r-- | vendor/github.com/vbauerster/mpb/internal/round.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/github.com/vbauerster/mpb/internal/round.go b/vendor/github.com/vbauerster/mpb/internal/round.go new file mode 100644 index 000000000..c54a789d2 --- /dev/null +++ b/vendor/github.com/vbauerster/mpb/internal/round.go @@ -0,0 +1,49 @@ +package internal + +import "math" + +const ( + uvone = 0x3FF0000000000000 + mask = 0x7FF + shift = 64 - 11 - 1 + bias = 1023 + signMask = 1 << 63 + fracMask = 1<<shift - 1 +) + +// Round returns the nearest integer, rounding half away from zero. +// +// Special cases are: +// Round(±0) = ±0 +// Round(±Inf) = ±Inf +// Round(NaN) = NaN +func Round(x float64) float64 { + // Round is a faster implementation of: + // + // func Round(x float64) float64 { + // t := Trunc(x) + // if Abs(x-t) >= 0.5 { + // return t + Copysign(1, x) + // } + // return t + // } + bits := math.Float64bits(x) + e := uint(bits>>shift) & mask + if e < bias { + // Round abs(x) < 1 including denormals. + bits &= signMask // +-0 + if e == bias-1 { + bits |= uvone // +-1 + } + } else if e < bias+shift { + // Round any abs(x) >= 1 containing a fractional component [0,1). + // + // Numbers with larger exponents are returned unchanged since they + // must be either an integer, infinity, or NaN. + const half = 1 << (shift - 1) + e -= bias + bits += half >> e + bits &^= fracMask >> e + } + return math.Float64frombits(bits) +} |