2014-11-08 56 views
0

根據the docs Ruby Float是一個「使用本機體系結構的雙精度浮點表示形式的不精確的實數」。如何找出Ruby中Float的大小是多少?

這是否意味着在32位Ruby上它們相當於一個C float和64位Ruby到一個C double

如果是的話,我該如何在運行時找出運行哪個Ruby程序(精確到多少位)?它應該適用於任何操作系統和任何Ruby實現(mri ruby​​,rubinius和jruby)。

我想出瞭解決辦法:

def architecture_bits 
    1.size * 8 
end 

是否在任何情況下工作?有更好/更優雅的方法嗎?

+1

無論是32位還是64位,雙精度通常意味着一個64位雙。 – 2014-11-08 08:26:57

+0

我需要確定,你確定嗎? – 2014-11-08 08:38:52

+1

Ruby中的所有浮點數都是雙精度的 – Benji 2014-11-08 08:39:17

回答

4

單/雙精度浮點數的大小與是否運行ruby的64/32位實現無關,因此您的實現將在任何32位ruby實現上返回錯誤答案。

Float定義常量,如Float::MANT_DIGFloat::MAX_EXP,您可以從中導出浮點使用的存儲量。雖然它不是一個ieee 754雙精度(53位尾數(其中52位存儲),1位符號,11位指數),但是它並不常見。

+0

因此,基本上,具有32位存儲位置的計算機使用兩個存儲單元來存儲64位雙精度數。 – Benji 2014-11-08 08:42:36

+0

非常感謝! – 2014-11-08 08:42:37

相關問題