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 の一般的な使用法を破ります。
では、なぜフロートがどこでも使用されるのでしょうか? この種のアプリケーションでメモリ使用量を最適化する大きな動機があるとは思えません。