2014-01-06 92 views
2

我在沒有專用浮點硬件的CPU上運行Lua,具體取決於SW仿真。Lua浮點操作

從luaopt.h我可以看到一些宏被設置爲double,但它沒有清楚地說明何時使用浮點數並且有點難以跟蹤它。

如果我的腳本做簡單的東西,如:

a=0 
a=a+1 
for... 

將涉及在任何級別的浮點運算?

如果沒問題,但將宏更改爲long有什麼好處?

(我試過,當然,但沒有工作....)(按照默認配置)浮點

+0

你是在談論'luaconf.h'中的LUA_NUMBER嗎? –

回答

5

Lua中所有數字的動作。在浮點和整數之間沒有區別,所有的值都只是數字。

實際C類型用來存儲一個Lua數目被設置在luaconf.h,並且其既允許甚至實際更改到合適的積分類型。您首先將LUA_NUMBERdouble更改爲int,long或可能ptrdiff_t。然後你會發現你需要調整控制字符串和數字之間轉換的相關宏。而且,當然,由於math.sin()和它的朋友和鄰居對於整數不是特別有用,所以您可能需要消除大部分或全部基本庫math庫。

結果將是一個Lua解釋器,其中所有數字都是整數。該語言仍然允許您鍵入3.14,但它將被存儲爲3。您的代碼可能不會完全移植到使用標準配置構建的Lua解釋器中,因爲大量的Lua代碼偶然會假定允許使用浮點運算,並且請記住,由於字節代碼將存儲您編譯的字節碼,因此它們肯定不兼容數字爲LUA_NUMBER

+0

Lua 5.3引入了整數。 – lhf

2

LNUM補丁(例如,OpenWrt項目主要依靠Lua在沒有FPU的硬件上提供Web UI),允許在Lua中使用雙整數/浮點數表示數字,並在後臺發生轉換時需要。有了它,大多數整數計算將不依靠FPU來執行。不幸的是,它只適用於Lua 5.1; 5.2不支持。

1

感謝您的澄清。

總結,對於具有微小的嵌入式CPU或其他任何東西沒有FPU其他讀者:

  • 在C語言中使用整數運算,但在浮點數加,如果有周圍也沒有路。 i = i + 1 doe s不涉及浮點操作。

  • 在Lua你必須決定。所有float或全部int。除非您完全移除對浮點數的支持,否則i = i + 1將涉及浮點數加法操作。

不瞭解Lua的內部,後者似乎有點缺點。無論如何,它仍然是我的測試快,所以這到目前爲止不是一個nogo。

如果上述不正確,請諮詢。

1月