工具.jpg
前言#
今天這個系列的函數我將其命名為工具,之所以這么命名是因為這個系列函數沒有復雜的公式,僅僅是取數字的一部分,或者是把數字變個形式等等,但有這些函數是很重要的,其中有很多函數是我們經常用到的,比如求絕對值、向下取整、求余運算等等。
內容#
math.huge##
- 原型:math.huge
- 解釋:返回HUGE_VAL的值,是一個大于任何數字的值。
math.abs()##
- 原型:math.abs(x)
- 解釋:返回一個數
x
的絕對值。
math.ceil()##
- 原型:math.ceil(x)
- 解釋:返回一個大于等于
x
的最小的一個數,即向上取整。
math.floor()##
- 原型:math.floor(x)
- 解釋:返回一個小于等于
x
的最大的一個數,即向下取整。
math.fmod()##
- 原型:math.fmod(x, y)
- 解釋:返回x%y的值,即想除以y的余數。
math.modf()##
- 原型:math.modf(x)
- 解釋:返回數
x
的整數部分和小數部分。
math.max()##
- 原型:math.max(x, ...)
- 解釋:返回所有參數中最大的一個值。
math.min()##
- 原型:math.min(x, ...)
- 解釋:返回所有參數中最小的一個值。
math.randomseed()##
- 原型:math.randomseed(x)
- 解釋:將
x
設置為偽隨機數生成器的種子,相同的隨機數生成器生成相同的數列。
math.random()##
- 原型:math.random([m [, n]])
- 解釋:這個函數就是提供了一個使用ANSI C函數rand的一個接口,可以生成一個偽隨機數。
- 當不傳任何參數時函數返回一個[0,1)范圍內的真實數字。
- 當只傳入數字
m
時,函數返回一個范圍[1,m]內的偽隨機整數。 - 當傳入兩個數字
m
,n
時,函數返回范圍[m,n]內的一個偽隨機整數。
Uasge##
- 首先新建一個文件然后命名為toolfunctest.lua編寫如下代碼:
-- 數字最大值
print("\nmath.huge = "..math.huge)
if 99999999 < math.huge then
print("math.huge test")
end
-- 絕對值
local x = 3
print("\nmath.abs("..x..") = "..math.abs(x))
x = -3
print("math.abs("..x..") = "..math.abs(x))
-- 向上取整
x = 3.1
print("\nmath.ceil("..x..") = "..math.ceil(x))
-- 向下取整
x = 3.9
print("\nmath.floor("..x..") = "..math.floor(x))
-- 求余數
x = 3
local y = 5
print("\nmath.fmod("..x..", "..y..") = "..math.fmod(x, y))
y = -5
print("math.fmod("..x..", "..y..") = "..math.fmod(x, y))
x = -3
y = 5
print("math.fmod("..x..", "..y..") = "..math.fmod(x, y))
-- 取整數和小數
x = 6.7
local zs, xs = math.modf(x)
print("\nmath.modf("..x..") = "..zs..", "..xs)
-- 最大值
x = 3; y = 10; z = 99
print("\nmath.max("..x..", "..y..", "..z..") = "..math.max(x, y, z))
-- 最小值
x = 3; y =-3; z= 32
print("\nmath.min("..x..", "..y..", "..z..") = "..math.min(x, y, z))
-- 隨機數
local m = 8;
local n = 100;
print("\nmath.random() = "..math.random())
print("\nmath.random("..m..") = "..math.random(m))
print("\nmath.random("..m..", "..n..") = "..math.random(m, n))
m = 9999;
math.randomseed(100)
print("\nmath.randomseed(100)")
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
math.randomseed(100)
print("\nmath.randomseed(100)")
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
math.randomseed(1000)
print("\nmath.randomseed(1000)")
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
print("math.random("..m..") = "..math.random(m))
- 運行結果
math_tool.png
總結#
- 注意
math.huge
的使用,這是一個值而不是一個函數,所以使用的時候千萬不要加括號。 - 我們可以重點分析一下產生隨機數的這個函數,從函數的定義中就可以看出,這個“隨機數”并不是真正的隨機,而是一個和時間種子相關的偽隨機序列。
- 當我們的隨機種子相同時就可以產生相同的,這一點從運行結果中也可以看到,而當改變這個隨機種子時,對應的序列也會改變,所以我們在日常的應用中常使用時間戳(從1970年1月1日至今的秒數)作為隨機種子來盡可能的保證函數產生的序列不相同。