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时,这会导致令人沮丧的不兼容性(所有十进制文字都需要添加到最后,或者所有浮点数需要重命名为double)。
看起来这可以在lib / preferences.txt中禁用:
# preprocessor: PdeEmitter.java
preproc.substitute_floats = true
#preproc.substitute_image = false
#preproc.substitute_font = false
然而,这打破了API的常见用法,因为所有Processing API函数都是为float编写的。
那么为什么飘浮到处都是?我无法想象在这种类型的应用程序中存在大量激励内存使用优化。
答案 0 :(得分:2)
处理主要是为了创建可视化应用程序,而不是进行严重的数字运算(根据名称,这无疑是具有讽刺意味的)。因此,开发人员不认为double
的精度是必要的。
根据documentation for the float
datatype:
“Processing也支持来自Java的'double'数据类型,但是没有记录,因为没有处理函数使用double值,这对于在Processing中创建的几乎所有工作都是过度的,并且使用更多的内存。我们没有计划支持双打,因为它需要显着增加API函数的数量。“