Math函式效能比較

2021-05-04 11:23:49 字數 2879 閱讀 9394

無論剛入門的還是有一定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。

redis memcache 效能比較

from redis和memcache非常像的,都是key,value的方式,將資料存放記憶體中。最近在學習redis,在網上看了一些這方面的資料,有三種觀點 1,redis讀寫記憶體比memcache快 2,memcache讀寫記憶體比redis快 3,memcache讀寫記憶體比redis快,但...

apache resin ngnix 效能比較

靜態頁面測試,靜態頁面包括css,js,img ab c 20 n 30 併發測試 高數值的也測過,結論一致 resin2.17 平均響應時間為0.521ms nginx 0.7.65 平均響應時間為1.042ms 少許幾次小於1.042 apache2.0 平均響應時間為最低1.042ms 在re...

tomcat效能比較

tomcat的四種基於http協議的connector效能比較 我們姑且把上面四種connector按照順序命名為 nio,http,pool,niop 為了不讓其他因素影響測試結果,我們只對乙個很簡單的jsp頁面進行測試,這個頁面僅僅是輸出乙個hello world。假設位址是 http tomc...