無論剛入門的還是有一定as3程式設計基礎的,對math類應該都不陌生了,但math類的效能又知多少呢?請看下文吧。
1、math.floor()
通俗的講這是乙個取整函式。
其實官方解釋是:
返回由引數 val 指定的數字或表示式的下限值。 下限值是小於等於指定數字或表示式的最接近的整數。
效能測試:
var num:number = math.pi;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:1865
複製**
var num:number = math.pi;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:69
複製**
結果很明顯,int比floor快,可能大家就要說了,那adobe傻x寫個這樣介面幹什麼?其實這就是我想說的對於floor的使用誤區。
仔細看官方解釋,其實floor不是乙個真正我們所理解的取整函式,他是去找最接近自己,且比自己小或者等於的整數,那這是什麼意思呢?
var num:number = - math.pi;
trace(int(num));
trace(math.floor(num));
// 結果1:-3
// 結果2:-4
複製**
這個例子很明確表示,當目標數字是負數時,int和floor所得出的結果不一樣。
int()的官方解釋:
將給定數字值轉換成整數值。 從小數點處截斷十進位制值。
相信看到這,你已經很明白了。
但是實際上,如果你這樣去使用int(),跟floor輸出的結果相同:
var num:number = - math.pi;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)else
}trace(gettimer() - time);
// 結果:132
複製**
2、math.pow()
對於這個方法,我也不知道說什麼好了,先看效能測試吧:
var a:int = 3;
var b:int = 4;
var c:int = 5;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:95
複製**
var a:int = 3;
var b:int = 4;
var c:int = 5;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:7999
複製**
勾三股四弦五大家應該比較多,但是用"*"乘法運算和pow的效能比較那是非常明顯啊。
難道大家又想說adobe**了?這兒我為它平反吧。
var num:number = math.pi;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:6682
複製**
先不說"*"乘法運算比pow快,就上面這段你能把它換算成使用"*"乘法運算嗎?
而且pow其實是可以這樣用的:(數學學得好都知道開方其實是可以轉換成乘方來算的)
trace(math.pow(27,1/3));
trace(math.pow(256,1/4));
trace(math.pow(3125,1/5));
複製**
而開方函式adobe只提供了sqrt乙個開平方根的介面(經測試math.sqrt(9)比math.pow(9,1/2)快,但開立方等就得靠pow了)。
3、math.round()
這個方法跟floor一樣的,先看效能測試:
var num:int = math.pi;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:1931
複製**
var num:int = math.pi;
var length:int = 10000000;
var time:int = gettimer();
for(var i:int = 0; i < length; i ++)
trace(gettimer() - time);
// 結果:68
複製**
四捨五入其實加個0.5在取整,這樣也是可以的,只不過用這個演算法,存在跟第乙個同樣的問題,當目標數值為負時,兩種方式結果不一樣,需要加個判斷,目標數值為負就把結果-1。
Java常用類 Math類
math類是乙個工具類,它的構造器 被定義成private,因此無法建立它的物件,math中所有的方法都是靜態的 可以直接通過math類名進行呼叫。math類還有兩個類變數 pi 和 e 它們分別對應 和 e math類中目前自己常用的幾個方法 math.floor double a 返回小於目標數...
常用類之Math類
math類中常用方法 1 三角函式方法 math類包含下面的三角函式方法 math.todegrees 這個方法是將 2到 2之間的弧度值轉化為度,例如 math.todegrees math.pi 2 結果為90.0 math.toradians 這個方法是將度轉化為 2到 2之間的弧度值,例如 ...
常用類 二 Math類
常用類 一 arrays陣列工具類 常用類 二 math類 常用類 三 bigdecimal和biginteger大數類 常用類 四 random隨機數類 常用類 五 date日期類和calender日曆類 常用類 六 string類與字串 常用類 七 包裝類 最小值 返回a,b中小的數 最大值 返...