为什么Processing使用浮动而不是双打?

时间:2013-10-07 17:28:13

标签: java processing

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编写的。

那么为什么飘浮到处都是?我无法想象在这种类型的应用程序中存在大量激励内存使用优化。

1 个答案:

答案 0 :(得分:2)

处理主要是为了创建可视化应用程序,而不是进行严重的数字运算(根据名称,这无疑是具有讽刺意味的)。因此,开发人员不认为double的精度是必要的。

根据documentation for the float datatype

  

“Processing也支持来自Java的'double'数据类型,但是没有记录,因为没有处理函数使用double值,这对于在Processing中创建的几乎所有工作都是过度的,并且使用更多的内存。我们没有计划支持双打,因为它需要显着增加API函数的数量。“