初版是為 Lua 5.0 編寫的。雖然對於後續版本而言,大部分內容仍然相關,但有些地方有所不同。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也可以協助 支持 Lua 專案


18 – 數學函式庫

在本章(以及其他關於標準函式庫的章節)中,我的目標不是提供每個函式的完整規格,而是向您展示函式庫可以提供的功能類型。為了清楚說明,我可能會省略一些細微的選項或行為。主要目的是激發您的好奇心,然後您可以透過參考手冊來滿足好奇心。

math 函式庫包含一組標準數學函式,例如三角函式(sincostanasinacos 等)、指數和對數(exploglog10)、捨入函式(floorceil)、maxmin,以及變數 pi。數學函式庫也定義運算子 `^´,用作指數運算子。

所有三角函式都以弧度為單位運算。(在 Lua 4.0 之前,它們以角度為單位運算。)您可以使用函式 degrad 在角度和弧度之間進行轉換。如果您想以角度為單位運算,您可以重新定義三角函式

    local sin, asin, ... = math.sin, math.asin, ...
    local deg, rad = math.deg, math.rad
    math.sin = function (x) return sin(rad(x)) end
    math.asin = function (x) return deg(asin(x)) end
    ...

math.random 函式會產生偽亂數。我們可以用三種方式呼叫它。當我們在沒有參數的情況下呼叫它時,它會傳回一個均勻分佈在區間 [0,1) 中的偽亂數實數。當我們只使用一個參數(整數 n)呼叫它時,它會傳回一個整數偽亂數 x,其中 1 <= x <= n。例如,您可以使用 random(6) 來模擬骰子的結果。最後,我們可以使用兩個整數參數(lu)呼叫 random,以取得一個偽亂數整數 x,其中 l <= x <= u

您可以使用 randomseed 函式設定偽亂數產生器的種子;其唯一的數字參數是種子。通常,當程式啟動時,它會使用固定的種子初始化產生器。這表示每次執行程式時,它都會產生相同的偽亂數序列。對於除錯而言,這是一個不錯的特性;但在遊戲中,您會不斷遇到相同的場景。解決此問題的常見技巧是使用目前時間作為種子

    math.randomseed(os.time())
os.time 函數會傳回一個數字,表示目前時間,通常是自某個紀元以來經過的秒數。)