Ruby語言中如何保存實數?我如何在內存中保留7.125作爲實數?在此代碼中:在Ruby語言中保留實數
myNumber = 7.125
puts("The number is #{myNumber}")
我不明白數字是如何保存在內存中的。
Ruby語言中如何保存實數?我如何在內存中保留7.125作爲實數?在此代碼中:在Ruby語言中保留實數
myNumber = 7.125
puts("The number is #{myNumber}")
我不明白數字是如何保存在內存中的。
在紅寶石1.8
& 1.9
,浮動從不立即,所以所有浮動需要一個新的內存分配。
在紅寶石2.0.0
,在64 bit
系統上,很多浮標are now immediate。這意味着典型的浮點數不再需要內存分配&的重新分配,這麼快的操作。
Ruby將其值存儲在一個指針(根據平臺不同而有所不同(32
或64
位)。它實際上使用了一個技巧來在那個指針中存儲立即數。這就是Fixnum只能容納31/63位的原因。
在32位平臺上,沒有聰明的方法來存儲浮動數據,但在64位平臺上,可以使用第一種方法將該值標記爲即時浮動值,其餘60個值用於存放數據。儘管如此,需要完整64位的浮點數不能是立即數,因此它們像以前一樣使用實際指針進行存儲。這種優化
更多信息可以在
在Ruby中沒有辦法保留實數。最接近的東西是Float
或Rational
,這兩者都不能完全表示實數。
'Float'和'Rational'在Fixnum類中?所以我的答案「7.125可以保存在fixnum類和內存使用1位爲點,其他位爲數字」 – user3697869
找到又如何Bigdecimal
類(任意精度算術)?請參閱API,該主題遵循標準。
[來自文檔](http://ruby-doc.org/core-2.2.3/Float.html):*「浮點對象使用本機體系結構的雙精度浮點表示法表示不精確的實數。」 *。無法直接從語言的API訪問它。但是,爲什麼你需要呢? – ndn
這是大學考試中的一個問題。 – user3697869
也許Ruby的整個觀點是你不應該考慮這些事情。 – Drenmi