2010-04-23 19 views
-4

我剛剛完成了對Java,Groovy和Scala的評估。使用BigDecimal時Groovy作爲Java的替代品?

我考慮的因素是:可讀性,精密

我想知道的因素:性能,易於集成

我需要的精度一個BigDecimal水平。

這裏是我的結果:

的Java

void someOp() 
{ 
    BigDecimal del_theta_1 = toDec(6); 
    BigDecimal del_theta_2 = toDec(2); 
    BigDecimal del_theta_m = toDec(0); 

    del_theta_m = abs(del_theta_1.subtract(del_theta_2)) 
     .divide(log(del_theta_1.divide(del_theta_2))); 

} 

Groovy的

void someOp() 
{ 
def del_theta_1 = 6.0 
def del_theta_2 = 2.0 
def del_theta_m = 0.0 

del_theta_m = Math.abs(del_theta_1 - del_theta_2)/Math.log(del_theta_1/del_theta_2); 
} 

斯卡拉

def other(){ 
var del_theta_1 = toDec(6); 
var del_theta_2 = toDec(2); 
var del_theta_m = toDec(0); 
del_theta_m = (
    abs(del_theta_1 - del_theta_2) 
/log(del_theta_1/del_theta_2) 
) 
} 

請注意,在Java和Scala中,我使用了靜態導入。

爪哇: 優點:它是爪哇
缺點:沒有操作員重載(批次O方法),勉強可讀/可編碼

Groovy的: 優點:默認的BigDecimal表示沒有可見的打字,至少所有操作令人驚訝的BigDecimal支持(包括師)
缺點:另一種語言的學習

斯卡拉: 優點:具有運算符重載爲BigDecimal的
缺點:與師(固定DECIMAL128)一些令人吃驚的行爲,另一種語言的學習

+3

儘管標題末尾有問號,但這似乎並不是一個問題。 – 2010-04-23 15:14:06

+0

@克里斯戴爾。你是對的,這裏並沒有真正的問題。 – 2010-04-23 15:17:23

+0

如果你不期望任何特定的精度,你怎麼能不被分裂感到驚訝?在數學上我不知道我應該期待什麼。 – 2010-04-23 16:02:42

回答

1

如果你的代碼的主要核心是一個很大的BigDecimal的數學,Java是隻是不正確的語言IMO。您需要運營商超載。

我希望將來的Java版本將允許系統定義的操作符爲內置數字類型重載,以使這種用例可用。

由於所有這些語言都運行在JVM上,因此您當然可以用正確的語言完成高級數學運算,並使用Java進行其他任何操作。這將最大限度地減少「學習另一種語言」方面。

4

BigDecimal的核心在每種語言中都是相同的。如果性能的限制因素是BigDecimal中的數學運算,那麼這三種語言之間將沒有區別,因爲它們都使用java.math.BigDecimal。

因此,使用最容易閱讀和理解的語言(這可能不是Java)。

+0

+1,我不知道他們在幕後都是一樣的 – Pops 2010-04-23 16:32:23