[英]Strategies for parallel implementation of Lua numbers and a 64bit integer
默認情況下,Lua使用雙精度浮點( double
)類型作為唯一的數字類型。 很好而且有用。 但是,我正在開發希望能看到64位整數的軟件,為此,我不會以一種或另一種方式使用實際的64位整數。
整數類型變得重要的地方是文件大小。 盡管我並不真正希望看到文件大小超出Lua可以使用double
表示的完整“整數”精度,但我還是要做好准備。
將64位整數類型與Lua的默認數字類型並行使用時,您可以推薦什么策略? 我真的不想把默認實現拋諸腦后(而且我不擔心它與整數算術相比的性能),但是我需要某種方式來表示64位整數,使其達到全精度,而不會造成太多性能損失。
我的問題是我不確定在哪里修改行為。 我應該修改語法並擴展解析器(想到的是帶有附加的LL或ULL的數字,據我所知在默認的Lua中不存在)或我應該編寫自己的C模塊並定義一個表示64位的userdata類型整數,以及能夠操縱值的庫函數? ...
注意:是的,我正在嵌入Lua,所以我可以隨意擴展它。
作為LuaJIT移植到ARM CPU(通常浮點數不高)的一部分,LuaJIT實現了“雙數VM”,從而可以在整數之間切換並根據需要動態浮動。 您可以自己使用它,只需在64位整數和雙精度數之間切換,而不是在32位整數和浮點數之間切換。
它當前在構建中,因此您可能需要考慮使用LuaJIT作為Lua的“解釋器”。 或者,您可以將其用作學習如何進行此類操作的方法。
但是,我同意馬塞洛的觀點。 53位尾數應該足夠。 在大約10年的時間里,您真的不需要此功能。
我建議將您的數據存儲在Lua之外,並在調用其他庫時使用某種類型的引用來檢索它。 然后,您可以將各種結果推送到Lua堆棧上,以供用戶查看,甚至可以精確地將值檢索為字符串,但是我會避免在Lua中修改它們並在調用外部庫時依賴Lua值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.