Тот факт, что обработка использует float, а не double, беспокоит меня в течение длительного времени.Почему обработка использует поплавки вместо двухместных?
Я нашел фактический блок кода в PdeEmitter.java, который зацикливание через ANTLR генерируется АСТ:
// 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 обработки были написаны для поплавка.
Так почему же поплавок используется повсюду? Я не могу представить, что существует большой стимул для оптимизации использования памяти в этом типе приложения.
http://stackoverflow.com/questions/417568/float-vs-double-performance – JNL
Я не знаю обработки, но для изображений float предложений обычно достаточно высокая точность. Я предполагаю, что выбор был сделан из-за более низкой * пропускной способности памяти * для float (так в основном скорость). Но вы должны попросить создателей получить окончательный ответ, почему этот выбор был сделан. – Durandal