2013-10-07 5 views
1

Тот факт, что обработка использует 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 обработки были написаны для поплавка.

Так почему же поплавок используется повсюду? Я не могу представить, что существует большой стимул для оптимизации использования памяти в этом типе приложения.

+0

http://stackoverflow.com/questions/417568/float-vs-double-performance – JNL

+2

Я не знаю обработки, но для изображений float предложений обычно достаточно высокая точность. Я предполагаю, что выбор был сделан из-за более низкой * пропускной способности памяти * для float (так в основном скорость). Но вы должны попросить создателей получить окончательный ответ, почему этот выбор был сделан. – Durandal

ответ

2

Обработка в основном направлена ​​на создание визуальных приложений, а не на серьезное количество хрустов (что, по общему признанию, иронично, учитывая название). Таким образом, разработчики не считают точность double необходимой.

Согласно documentation for the float datatype:

«Обработка поддерживает„двойной“тип данных из Java, а также, однако это не документировано, так как ни одна из функций обработки не используются двойные значения, которые являются излишеством почти все работы созданный в процессе обработки и использования большего объема памяти. Мы не планируем поддерживать дублирование, поскольку это потребует значительного увеличения количества функций API ».

Смежные вопросы