此代码在表中存储0到4095之间的数字的sqrt(),我想将其转换为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;
答案 0 :(得分:1)
您可以找到sizeof
HERE的定义。据我所知,AS3中没有类似的运算符。我从来没有在文档中遇到类似的东西,搜索什么也没透露。
事实上,我能找到的最接近的是完全不相关的ByteArray,我可以保证不会达到同样的目的,因为一个是高级数据类型,另一个是运营商。他们的用法甚至不相似。
我很好奇,这段代码的目标是什么?也许还有另一种方法可以达到同样的目的。 (显然,从阅读评论来看,实际上有更好的方法。)
编辑:请参阅下面的基本评论......可能有类似的内容。
答案 1 :(得分:1)
抱歉,我不能提供翻译,因为我不知道Actionscript,但我认为这也会帮助你:
C sizeof
- 运算符返回其参数的大小(以字节为单位)。这不是你需要关注像Actionscript这样的“托管”语言的东西。您发布的C代码(我实际上没有看到任何可能使其成为C ++的内容)会循环遍历(size_of_the_array_in_bytes
/ size_of_one_array_element_in_bytes
)次。在您的情况下,复杂的表达式将简单地计算为4096。
在其他世界中,创建一个循环,执行平方根的存储4096次。
您使用的C代码作为基础似乎写得很差。我似乎无法找到一个原因,人们会使用如此复杂,冗长和难以理解的方式来填充简单的查找表。 IMO,它应该是这样的:
#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);
更具可读性,不是吗?