2009-06-03 1840 views
12

在文檔中似乎沒有明確的答案。Lua中數字的最大值是多少?

我對增加一個變量time感興趣,它計算自程序啓動以來的秒數。如果最大值可以計入未來,比如100年,那麼我不關心讓變量永遠增加。否則我將不得不考慮一個好點的重置time回到0

回答

19

默認情況下編譯的,編號是double,在大多數編譯器上都是IEEE 64位浮點。這意味着10位指數,所以最大數量大約爲2^1024或5.6e300年。這是很長的時間。

現在,如果你正在增加它,你可能會對整數範圍更感興趣。 52位尾數意味着可以整數精度使用的最高數字是2^52,大約4.5e15。在31,557,600秒/年,這是1.427e8,近1.5億年。任何進程仍然是非常長的正常運行時間

更新2014-12-30:Lua 5.3(隨時可以發佈)增加了對整數值的支持,通過編譯標誌選擇32或64位。

+19

謝謝,我能袖手旁觀幾個程序員遭人恨,從現在1.5億年。 – Kai 2009-06-03 17:18:48

+3

順便說一句,雖然它是一個52bit的尾數,但有一個「額外」隱含的精度位,所以最高可以增加一個大約是2^53。 – Eloff 2013-08-11 20:39:36

0

我發現了LUA用戶網站

的Lua內核不使用64個數據類型this email,除了隱含的 到size_tptrdiff_t(它恰好在64位盒子上是64位)。

的sizeof(浮點)== 4
的sizeof(雙)== 8

可以定義lua_Number是一個雙(默認)中,用至少32位漂浮或任何整數 。雖然有副作用,並且由於浮點數或整數範圍有限,一些擴展 可能會停止工作。但是核心 應該沒問題。

7

儘管tydok對PiL 2.3的引用是正確的,apropos,並且Javier's answer在實踐中是正確的,但我認爲在Lua中討論數字應該包括一些其他細節。

Lua解釋器被設計爲嵌入在應用程序中,通常作爲配置和/或腳本語言。當爲應用程序構建時,通常會配置其某些功能以適應。

用於配置的確切數字類型可用於配置。當爲沒有硬件浮點的平臺編譯加載第三方模塊不重要時(特別是在嵌入式系統或機頂盒遊戲控制檯應用程序中)時,選擇整型而不是缺省值double是合理的。偶爾,切換到float也是合理的。

但是,有些應用程序需要64位整數,或者大多數數字可以是整數,但偶爾需要浮點運算。對於這些情況,Lua核心有LNUM patch

LNUM更改核心,以便數字以整數或浮點形式存儲,並允許多個可配置的選擇以確保每個數字的精度。

因此,對於Lua數最大值問題的底線答案是它取決於編譯時選擇的解釋器的配置,以及您是否擔心可表示的最大值或最大整數。即使如此,我們仍然努力使大整數在浮點表示方式下運行良好。

0

使用Lua5.1或Lua5.2

最大格式的數字:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368 

如果你改變了68至69在最後它仍然只顯示大於68 一個數字以上數字返回math.huge aka inf。

它等於:1.8x10^308或2^1024以南。

試一試:

print(string.format("%.0f",number)) 
相關問題