1

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 函数都是为浮点数编写的。

那么为什么到处都使用浮点数呢?我无法想象在这种类型的应用程序中内存使用优化会有很大的动力。

4

1 回答 1

2

处理的主要目的是创建视觉应用程序,而不是进行严肃的数字运算(这确实具有讽刺意味,顾名思义)。因此,开发人员认为 a 的精度没有double必要。

根据数据类型的文档float

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

于 2013-11-02T00:31:24.757 回答