我刚刚完成了对Java,Groovy和Scala的评估。
我考虑的因素是:可读性,精确度
我想知道的因素:性能,易于集成
我需要一个BigDecimal级别的精度。
以下是我的结果:
爪哇
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);
}
Scala的
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中,我使用了静态导入。
爪哇:
优点:它是Java
缺点:没有运算符重载(很多方法),几乎不可读/可编码
Groovy的:
优点:默认BigDecimal表示没有可见的输入,最不令人惊讶的BigDecimal支持所有操作(包括分区)
缺点:另一种学习语言
Scala的:
优点:有BigDecimal的运算符重载
缺点:一些令人惊讶的分裂行为(用Decimal128修复),另一种学习语言
答案 0 :(得分:4)
BigDecimal的核心在每种语言中都是相同的。如果性能的限制因素是BigDecimal中的数学运算,则三种语言之间没有区别,因为它们都使用java.math.BigDecimal。
因此,请使用最容易阅读和理解的语言(可能不是java)。
答案 1 :(得分:1)
如果你的代码的主要核心是很多BigDecimal数学,那么Java就不是正确的语言IMO。您需要运算符重载。
我希望Java的未来版本允许系统定义的运算符重载内置数字类型,以使这种用例可用。
由于所有这些语言都在JVM上运行,因此您当然可以使用正确的语言完成高级数学运算,并将Java用于其他所有语言。这将最大限度地减少“学习另一种语言”的方面。