2013-10-07 32 views
1

加工使用float而不是double的事實讓我困擾了很長時間。爲什麼Processing使用浮動而不是雙打?

我發現在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函數進行浮法寫的。

那麼爲什麼到處都用浮子?我無法想象在這種類型的應用程序中存在大量的內存使用優化激勵。

+0

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

+2

我不知道處理,但對於圖像浮動提供通常足夠的精度。我猜這個選擇是因爲float的內存帶寬要求較低(所以基本上是速度)。但是你必須要求創作者獲得一個*明確*回答爲什麼做出這個選擇。 – Durandal

回答

2

處理主要是爲了創建視覺應用程序,而不是進行嚴重的數字處理(這被公認爲具有諷刺意味,因爲名稱)。因此,開發人員不認爲double的精度是必要的。

按照documentation for the float datatype

「處理支持從Java中的‘雙’的數據類型爲好,但它不記錄,因爲沒有任何的處理功能使用雙重價值,這是矯枉過正,幾乎所有的工作在Processing中創建並使用更多內存,我們不打算支持雙打,因爲它需要顯着增加API函數的數量。「

相關問題