0

这段代码将 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;
4

2 回答 2

1

您可以找到sizeof HERE的定义。据我所知,AS3 中没有类似的运算符。我从来没有在文档中遇到过类似的东西,搜索也没有发现任何东西。

事实上,我能找到的最接近它的是完全不相关的ByteArray,我可以保证不会达到同样的目的,因为一个是高级数据类型,另一个是运算符。它们的用法甚至都不相似。

我很好奇,这段代码的目标是什么?也许还有另一种方法可以达到同样的目的。(显然从阅读评论来看,实际上有更好的方法。)

编辑:见下面基本的评论......可能有类似的东西。

于 2012-06-19T23:11:01.897 回答
1

抱歉,由于我不了解 Actionscript,因此无法提供翻译,但我认为这也会对您有所帮助:

Csizeof运算符返回其参数的大小(以字节为单位)。在像 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);

更具可读性,不是吗?

于 2012-06-19T23:16:50.170 回答