通过忽略golang中的最后一位来比较浮点数

A specification reads as follows:

It still considers real numbers equal if they differ in their last binary digit.

I would like to implement this way of comparing floats for the float64 data type in Go. Unfortunately, the bitwise operators aren't defined for floating point numbers. Is there a way to achieve this way of comparing floats in the Go language?

If you want to know if two float64 values are adjacent (that is, there's no float64 value between them):

func almostEqual(a, b float64) bool {
    ai, bi := int64(math.Float64bits(a)), int64(math.Float64bits(b))
    return a == b || -1 <= ai-bi && ai-bi <= 1
}

Mostly that's the same as saying they differ in the lowest bit of their mantissa.

This code doesn't work if a or b are NaNs, zeros or infinities, but you could add special cases if you wished.

See https://randomascii.wordpress.com/2012/01/23/stupid-float-tricks-2/

This looks like a perfect use case for the following function from the math package:

func equal(x, y float64) bool {
    return math.Nextafter(x, y) == y
}

Nextafter returns the next representable float64 value after x towards y.

Special cases are:
Nextafter(x, x) = x
Nextafter(NaN, y) = NaN
Nextafter(x, NaN) = NaN

https://play.golang.org/p/unRkkoe6wb