Processing 使用 float 而不是 double 的事实困扰了我很长时间。
我在 PdeEmitter.java 中找到了实际的代码块,它循环通过 ANTLR 生成的 AST:
// making floating point literals default to floats, not doubles
case NUM_DOUBLE:
final String literalDouble = ast.getText().toLowerCase();
out.print(literalDouble);
if (Preferences.getBoolean("preproc.substitute_floats")
&& literalDouble.indexOf('d') == -1) { // permit literal doubles
out.print("f");
}
dumpHiddenAfter(ast);
break;
在将处理代码转换为标准 java 时,这会导致令人沮丧的不兼容性(所有十进制文字都需要在末尾添加 f,或者所有浮点数都需要重命名为 double)。
看起来这可以在 lib/preferences.txt 中禁用:
# preprocessor: PdeEmitter.java
preproc.substitute_floats = true
#preproc.substitute_image = false
#preproc.substitute_font = false
然而,这打破了 API 的常见用途,因为所有处理 API 函数都是为浮点数编写的。
那么为什么到处都使用浮点数呢?我无法想象在这种类型的应用程序中内存使用优化会有很大的动力。