有人可以将这个C ++翻译成AS3吗?

时间:2012-06-19 23:03:59

标签: actionscript-3 actionscript square-root

此代码在表中存储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;

2 个答案:

答案 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);

更具可读性,不是吗?