Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么处理使用浮点而不是双精度?_Java_Processing - Fatal编程技术网

Java 为什么处理使用浮点而不是双精度?

Java 为什么处理使用浮点而不是双精度?,java,processing,Java,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); i

处理使用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函数都是为浮点编写的


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

处理主要是为了创建可视化应用程序,而不是进行严重的数字运算(顾名思义,这很讽刺)。因此,开发人员不认为需要
double
的精度

根据报告:

“处理也支持Java中的‘double’数据类型,但是没有文档记录,因为没有任何处理函数使用double值,这对于处理过程中创建的几乎所有工作来说都是多余的,并且会占用更多内存。我们不打算支持double,因为这需要显著增加API函数的数量。”


我不知道如何处理,但对于图像,float通常提供足够的精度。我猜之所以选择它是因为浮点运算对内存带宽的要求较低(所以基本上是速度)。但你必须问创作者,以得到一个明确的答案,为什么会做出这样的选择。