1

Processing が double ではなく float を使用するという事実は、長い間私を悩ませてきました。

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;

これにより、Processing コードを標準の Java に変換するときに、イライラするほどの非互換性が生じます (すべての 10 進数リテラルの末尾に f を追加するか、すべての浮動小数点数を double に名前変更する必要があります)。

これは lib/preferences.txt で無効にできるようです:

# preprocessor: PdeEmitter.java
preproc.substitute_floats = true
#preproc.substitute_image = false
#preproc.substitute_font = false

それにもかかわらず、これはすべての処理 API 関数が float 用に記述されているため、API の一般的な使用法を破ります。

では、なぜフロートがどこでも使用されるのでしょうか? この種のアプリケーションでメモリ使用量を最適化する大きな動機があるとは思えません。

4

1 に答える 1

2

プロセッシングは、深刻な数の処理 (名前からして明らかに皮肉なことです) を行うのではなく、視覚的なアプリケーションを作成することを主な目的としています。そのため、開発者は a の精度が必要だとは考えていませんdouble

datatypeのドキュメントにfloatよると:

「Processing は Java の 'double' データ型もサポートしていますが、ドキュメント化されていません。これは、Processing で作成されたほぼすべての作業に対して過剰であり、より多くのメモリを使用する double 値を使用する処理関数がないためです。double をサポートする予定はありません。 、API 関数の数を大幅に増やす必要があるためです。」

于 2013-11-02T00:31:24.757 に答える