在Java 1.4中预处理编译时常量数组

时间:2018-01-23 11:01:23

标签: java signal-processing compile-time-constant java1.4

对于当前项目,我的任务是为只能执行Java 1.4字节码的机器优化D​​SP算法。对于频移,该算法需要对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;
} 

应该是常量并且在编译时是已知的,可以用任何方式表示,以便所有计算都在编译时执行?如果没有,那么在加载类之前进行这些计算会是另一种方式(注意静态初始化器在使用类之前执行,但仍然在运行时)?此外,如果之前无法计算,为什么?

可能的其他选项

我想到了解决问题的其他方法

  • 文件输入:使用脚本计算系数,将它们写入文件,读取该文件。我没有关于机器上文件I / O速度的信息
  • 资源:可能,数组可以编译成资源。与文件输入相同的问题(真的吗?)

  • 硬编码。没有人愿意这样做,但也许这是合法的。另外,我关心我的滚轮。

  • 代码生成器。我会让其他程序计算系数并将它们插入到原始代码的模板中。不过,这会生成包含大量不必要行的源文件。

到目前为止,我还没有想出哪种方式最好。

感谢您在此提出第一个问题的答案!

0 个答案:

没有答案