对于当前项目,我的任务是为只能执行Java 1.4字节码的机器优化DSP算法。对于频移,该算法需要对e ^( - 2 * i * pi * n * k * C)的系数进行大量计算;在我的例子中,k的范围是0-10,n的范围是0-4095。 C是常数。
为了加速算法,我想要做的是预先计算这些系数,理想情况下,在编译时完成。
因此,我的问题是:
可以
private final static float[][] coefficientsReal = getCoefficientsReal();
private final static float[][] getCoefficientsReal(){
float[][] coeffReal = new float[11][];
for (int kk=0; kk<11;kk++){
coeffReal[kk]= new float[4096];
for (int nn = 0; nn < 4096; nn++){
coeffReal[kk][nn] = Math.cos(-2 * (float)Math.PI * kk * nn * C);
}
}
return coeffReal;
}
应该是常量并且在编译时是已知的,可以用任何方式表示,以便所有计算都在编译时执行?如果没有,那么在加载类之前进行这些计算会是另一种方式(注意静态初始化器在使用类之前执行,但仍然在运行时)?此外,如果之前无法计算,为什么?
可能的其他选项
我想到了解决问题的其他方法
资源:可能,数组可以编译成资源。与文件输入相同的问题(真的吗?)
硬编码。没有人愿意这样做,但也许这是合法的。另外,我关心我的滚轮。
到目前为止,我还没有想出哪种方式最好。
感谢您在此提出第一个问题的答案!