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

通过忽略golang中的最后一位来比较浮点,go,floating-point,Go,Floating Point,规范内容如下: 它仍然认为,如果实数在最后一个阶段不同,那么它们是相等的 二进制数字 我想实现这种比较Go中float64数据类型的浮动的方法。不幸的是,没有为浮点数定义位运算符。有没有一种方法可以实现这种在Go语言中比较浮动的方式?如果您想知道两个float64值是否相邻(即,它们之间没有float64值): func almostEqual(a,b)bool{ ai,bi:=int64(数学浮点64位(a)),int64(数学浮点64位(b)) 如果要知道两个float64值是否相邻(即它们

规范内容如下:

它仍然认为,如果实数在最后一个阶段不同,那么它们是相等的 二进制数字


我想实现这种比较Go中float64数据类型的浮动的方法。不幸的是,没有为浮点数定义位运算符。有没有一种方法可以实现这种在Go语言中比较浮动的方式?

如果您想知道两个
float64
值是否相邻(即,它们之间没有
float64
值):

func almostEqual(a,b)bool{
ai,bi:=int64(数学浮点64位(a)),int64(数学浮点64位(b))

如果要知道两个
float64
值是否相邻(即它们之间没有
float64
值),请返回a==b | |-1:

func almostEqual(a,b)bool{
ai,bi:=int64(数学浮点64位(a)),int64(数学浮点64位(b))

返回a==b | |-1这看起来像是数学包中以下函数的完美用例:

func equal(x, y float64) bool {
    return math.Nextafter(x, y) == y
}
Nextafter返回x之后向y方向的下一个可表示的float64值。

特殊情况包括:
下一步(x,x)=x
下一步(NaN,y)=NaN
下一个之后(x,NaN)=NaN


这看起来是math软件包中以下函数的完美用例:

func equal(x, y float64) bool {
    return math.Nextafter(x, y) == y
}
Nextafter返回x之后向y方向的下一个可表示的float64值。

特殊情况包括:
下一步(x,x)=x
下一步(NaN,y)=NaN
下一个之后(x,NaN)=NaN


什么是“最后一个二进制数字”关于实数?你能举一些例子吗?@PaulHankin我试图复制另一个系统的行为,这是我对该系统处理比较的唯一描述。但在我的测试案例中,你的
almostEqual
给出了相同的结果,我会在其他人有机会做出响应后接受它。谢谢。什么是“最后一个二进制数字”关于一个实数?你能举一些例子吗?@PaulHankin我正在尝试复制另一个系统的行为,这是我对该系统如何处理比较的唯一描述。但在我的测试案例中,你的
almostEqual
给出了相同的结果,我会在其他人有机会回应后接受它。谢谢。