2016-01-01 37 views
-6

Ruby語言中如何保存實數?我如何在內存中保留7.125作爲實數?在此代碼中:在Ruby語言中保留實數

myNumber = 7.125 
puts("The number is #{myNumber}") 

我不明白數字是如何保存在內存中的。

+2

[來自文檔](http://ruby-doc.org/core-2.2.3/Float.html):*「浮點對象使用本機體系結構的雙精度浮點表示法表示不精確的實數。」 *。無法直接從語言的API訪問它。但是,爲什麼你需要呢? – ndn

+0

這是大學考試中的一個問題。 – user3697869

+0

也許Ruby的整個觀點是你不應該考慮這些事情。 – Drenmi

回答

2

在紅寶石1.8 & 1.9,浮動從不立即,所以所有浮動需要一個新的內存分配。

在紅寶石2.0.0,在64 bit系統上,很多浮標are now immediate。這意味着典型的浮點數不再需要內存分配&的重新分配,這麼快的操作。

Ruby將其值存儲在一個指針(根據平臺不同而有所不同(3264位)。它實際上使用了一個技巧來在那個指針中存儲立即數。這就是Fixnum只能容納31/63位的原因。

在32位平臺上,沒有聰明的方法來存儲浮動數據,但在64位平臺上,可以使用第一種方法將該值標記爲即時浮動值,其餘60個值用於存放數據。儘管如此,需要完整64位的浮點數不能是立即數,因此它們像以前一樣使用實際指針進行存儲。這種優化

更多信息可以在​​

+0

這太籠統了。 OP要特別瞭解真實數字(或浮點數,根據ndn的解釋)。 – sawa

+1

我不明白'Fixnum'是如何相關的。 – sawa

+0

@sawa:謝謝你清楚我對OP問題的誤解。我希望現在是相關答案,還是應該刪除? –

0

在Ruby中沒有辦法保留實數。最接近的東西是FloatRational,這兩者都不能完全表示實數。

+0

'Float'和'Rational'在Fixnum類中?所以我的答案「7.125可以保存在fixnum類和內存使用1位爲點,其他位爲數字」 – user3697869

0

找到又如何Bigdecimal類(任意精度算術)?請參閱API,該主題遵循標準。