Может кто-нибудь перевести этот C++ на AS3?
Этот код хранит sqrt() чисел от 0 до 4095 в таблице, и я хотел бы перевести его в Actionscript 3.
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 ответа
Извините, я не могу предоставить перевод, так как не знаю 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);
Намного более читабельно, нет?
Вы можете найти определение sizeof
ЗДЕСЬ Насколько я знаю, в AS3 нет аналогичного оператора. Я никогда не встречал ничего подобного в документации, и поиски ничего не выявили.
На самом деле, самое близкое, что я могу найти к этому, - это совершенно не связанный ByteArray, который, я могу гарантировать , не достигнет той же цели, так как один является продвинутым типом данных, а другой - оператором. Их обычаи даже не похожи.
Мне интересно, какова цель этого кода? Возможно, есть другой способ достичь той же цели. (И, видимо, читая комментарии, на самом деле есть лучший способ.)
РЕДАКТИРОВАТЬ: См. Комментарий Basic ниже... может быть что-то подобное.