2014-09-26 91 views
3

有沒有辦法獲得類型或變量的最大精度?如何獲得類型的精度?

所以,一個人不必使用魔術常量......我認爲會有像float.precision,但我沒有看到它。

對於float它會返回7,雙15等

+2

據我所知,沒有 – 2014-09-26 10:05:29

+1

爲什麼你需要這樣做? – 2014-09-26 10:07:40

+5

鑑於這種類型的適用數量很少,爲什麼不對它進行硬編碼呢? (當然,在一個地方。) – 2014-09-26 10:08:10

回答

4

有沒有內置的方式來發現這一點。核心問題是CLI規範沒有指定float或double的編碼方式。它允許CLR實現使用比預定義的'float32'和'float64'類型更精確的本機浮點類型。

這已經足夠真實了,Intel/AMD處理器實際上存儲的浮點數值是,更精確的是。他們的內部格式是80位。這個設計決策是一個無法解決的災難,它會導致計算結果隨機更改,具體取決於代碼是否在Release或Debug版本中運行,當計算失去大量有效數字時,代碼的非常小的更改可能會導致截然不同的結果。協處理器剛剛被重新設計,以解決這個問題,但我們仍然堅持32位代碼中的舊問題。微軟無法修復x86抖動,轉向新的協處理器設計會打破太多現有的程序。

出於所有實際目的,您可以將精度硬編碼爲7位和15位。遵循IEEE-754標準,它規定了單精度浮點值和雙精度浮點值的編碼。這將持續到下一個50年。不實用的是在沒有硬件支持的情況下在處理器上運行的.NET Micro Framework應用程序。

請保持其他原因記住爲什麼精度不暴露,它承諾完全太多。當你計算,比如0.1234567f - 0.1234568f,那麼你只有一個有效數字左邊。在大多數情況下生成垃圾結果。

+0

謝謝你有見地的答案! – NoxArt 2014-09-26 14:30:20