簡體   English   中英

Lua數字和64位整數的並行實現策略

[英]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值。

如果你不會需要浮點精度在程序中的任何一點,你可以重新定義LUA_NUMBER__int64 (或任何64位int可能是在您的環境)中luaconf.h

否則,您可以引入另一個庫來處理您的整數-為了獲得無限精度,您可以使用bignum庫,例如lhf的lbn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM