2012-06-19 99 views
0

此代碼存儲從0數的平方根()4095在一個表中,我想將它翻譯成ActionScript 3有人可以把這個C++轉換成AS3嗎?

unsigned short int_sqrt_x1024[4096]; 

for (int i=0; i<sizeof(int_sqrt_x1024)/sizeof(int_sqrt_x1024[0]); i++) 
int_sqrt_x1024[i] = (int)(sqrtf((float)i + 0.5f) * 1024.0f); 

我已經完成了一半了,但「的sizeof」部件讓我感到困惑,我還沒有弄清楚如何處理這些問題!

所以根據您的建議我來到了這個,你覺得什麼???:

var int_sqrt_x1024:Vector.<uint> = new Vector.<uint>(4096,true) 
for (var i:int = 0; i < int_sqrt_x1024.length; i++) 
int_sqrt_x1024[i] = Math.sqrt(i + 0.5) * 1024; 
+2

你應該忽略sizeof代碼,這是一個醜陋的方式,首先在C++中完成它。循環迭代4096次,所以只需將sizeof項替換爲i <4096 – TJD

回答

1

你可以找到sizeofHERE定義。就我所知,在AS3中沒有類似的操作符。我從來沒有在文檔中遇到過類似的東西,搜索也沒有任何結果。

其實,我可以找到它最接近的東西是完全不相關的ByteArray,我可以保證不會達到同樣的目的,因爲一個是一個先進的數據類型,另一個是運營商。他們的用法甚至不相似。

我很好奇,這段代碼的目標是什麼?也許還有另一種方式來達到同樣的目的。 (顯然,從閱讀評論,實際上有一個更好的方法。)

編輯:請參閱下面的基本評論...可能有類似的東西。

+1

有趣的是,此頁面http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7fff.html似乎意味着存在一個'getSize()'?雖然我同意,只是做循環'0 <=我<4096'會更簡單 – Basic

+0

那麼,我會羽化.... – CodeMouse92

1

對不起,我不能提供一個翻譯,因爲我不知道的ActionScript,但我認爲這將幫助你太:

的C sizeof - 運算符在其參數的字節返回的大小。這不是您需要關注像Actionscript這樣的「託管」語言的問題。你發佈的C代碼(我真的沒有看到任何必須使它成爲C++的東西),它循環遍歷循環(size_of_the_array_in_bytes/size_of_one_array_element_in_bytes)次。在你的情況下,這個複雜的表達式將簡單地評估爲4096.

在其他世界中,製作一個執行平方根存儲4096次的循環。


您用作基礎的C代碼似乎寫得很差。我似乎無法找到一個理由,使用這種複雜,冗長和不可讀的方式來填充簡單的查找表。國際海事組織,它應該是這樣的:

#define LOOKUPTABLE_LENGTH 4096 
unsigned short int_sqrt_x1024[LOOKUPTABLE_LENGTH]; 

for (int i=0; i<LOOKUPTABLE_LENGTH; i++) 
    int_sqrt_x1024[i] = (int)(sqrtf((float)i + 0.5f) * 1024.0f); 

更可讀性,不是?

+0

是啊,這似乎更合理,太糟糕我真的不知道很多的C/C++ 我已經從這裏的代碼btw: http://www.geisswerks.com/ryan/FAQS/fast_int_sqrt.html –

+0

嗯,那裏的整體代碼似乎對我來說更合理。也許作者只是不喜歡定義和全局常量?儘管如此,它們應該用於這個確切的目的。而且由於我不允許對你的問題發表評論,所以我把它放在這裏:編輯中的AS3翻譯似乎沒問題。我認爲你可以繼續這樣做。 – Awaki

相關問題