2014-03-04 32 views
5

什么是最简单的方法来获得机器epsilon Go(golang)?浮点数的其他方面如精度,最小指数,最大指数,摆动等?最简单的方法获取机器epsilon去(golang)

我意识到有不同的浮动类型(http://golang.org/src/pkg/math/const.go)的最大值和最小值的数学/常量包,但没有其他信息。

我想知道的一个原因是验证我已达到机器可以执行的给定计算的最大精度,以便我不会提前退出或尝试更长的时间。

另一个只是为了好奇。

感谢

编辑:

因为我从学校如何手动计算小量的玩意儿一些笔记抬头一看,这里的乐趣是从C++ http://play.golang.org/p/XOXwIdNfsa享受

一个粗略的翻译编辑:从下面 评论(感谢发现小量的更地道的方式):

使用epsilon := math.Nextafter(1, 2) - 1Playground - Nick Craig-Wood在8:07

回答

8

它没有定义3月5日,我发现问题跟踪解析为“发挥预期”的问题:

https://code.google.com/p/go/issues/detail?id=966

的建议似乎是使用math.Nextafter导出价值,如果你需要它。

具体而言,公式为math.Nextafter(1.0,2.0)-1.0(第二个参数可以是任何大于1.0的数字)。

+0

链接为懒惰http://golang.org/pkg/math/#Nextafter ...谢谢! – sbditto85

+4

使用'epsilon:= math.Nextafter(1,2) - 1' [Playground](http://play.golang.org/p/EkigXdFDQE) –

1

7.0/3 - 4./3 - 1.应该使用任何语言,据我了解,我可能是错的。

package main 

import "fmt" 

func main() { 
    f32 := float32(7.)/3 - float32(4.)/3 - float32(1.) 
    fmt.Println(f32) 

    f64 := float64(7.)/3 - float64(4.)/3 - float64(1.) 
    fmt.Println(f64) 
} 

收率:

-1.1920929e-07 
2.220446049250313e-16 

服用F32的绝对值(无符号)的值应该是正确的。

+1

你知道这个公式来自哪里吗?或为什么它的作品? – sbditto85

+1

(7/3) - (4/3)是(3/3)通过“怪异”的浮点数得到的,它不能被正确地表示......其中-1应该给我们不同......我猜? – sbditto85

+0

当然,看到这里的问题3:http://rstudio-pubs-static.s3.amazonaws.com/13303_daf1916bee714161ac78d3318de808a9.html – Moustache