2014-03-04 80 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