lua 的整數運算很不幸的,只有到 32bit 的範圍(-2,147,483,648 ~ 2,147,483,647),但透過 lnum 之 patch 之後,可支援到 64bit(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)底下是 patch 之過程的記錄:
1. 到 這裡 取得 Lua 5.1.4 原始碼。
2. 到 這裡 取得 lua514-lnum-20090417.patch.tgz。
3. 執行 patch 指令
a. linux or mac :
i. 解壓解 lua 5.1.4 及 lua514-lnum-20090417.patch.tgz
ii. 把 lua514-lnum-20090417.patch 擺在 lua 5.1.4 之 src 目錄下
ii. 進到 lua src 檔目錄下
iii. 執行 patch < lua514-lnum-20090417.patch
b. windows :
i. 到 這裡 下載 patch 執行檔
ii. 解壓解 lua 5.1.4 及 lua514-lnum-20090417.patch.tgz
ii. 把 lua514-lnum-20090417.patch 和 patch.exe 擺在 lua 5.1.4 之 src 目錄下
ii. 進到 lua src 檔目錄下
iii. 假如使用的是 win7, vista 作業系統,須把 patch.exe 改成其它名稱(例如 cc.exe)
iv. 執行 patch < lua514-lnum.patch(或者 cc < lua514-lnum.patch)
v. 假如顯示 Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354…訊息:
1. 執行 write lua514-lnum-20090417.path
2. 將會跳出 wordpad 視窗,此時直接按存檔並離開
3. 重新執行 iv 指令
4. 開啟 luaconf.h,找到下列關鍵字:
/*
@@ LNUM_DOUBLE | LNUM_FLOAT | LNUM_LDOUBLE: Generic Lua number mode
@@ LNUM_INT32 | LNUM_INT64: Integer type (optional)
@@ LNUM_COMPLEX: Define for using 'a+bi' numbers
@*
@* You can combine LNUM_xxx but only one of each group. I.e. 'LNUM_FLOAT
@* LNUM_INT32 LNUM_COMPLEX' gives float range complex numbers, with
@* 32-bit scalar integer range optimized.
*/
/*#define LNUM_DOUBLE*/
5. 在關鍵字下一行加入 #define LNUM_INT64
6. 開始編譯(可參考 這篇)