-5

我刚刚完成了对 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)));

}

时髦的

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 中,我使用了静态导入。

Java: 优点:它是 Java
缺点:没有运算符重载(很多方法),几乎不可读/可编码

Groovy: 优点:默认 BigDecimal 意味着没有可见的输入,最令人惊讶的是 BigDecimal 支持所有操作(包括除法)
缺点:另一种要学习的语言

Scala: 优点:BigDecimal 有运算符重载
缺点:除法的一些令人惊讶的行为(用 Decimal128 修复),另一种要学习的语言

4

2 回答 2

4

BigDecimal 的核心在每种语言中都是相同的。如果限制性能的因素是 BigDecimal 中的数学运算,那么这三种语言之间没有区别,因为它们都使用 java.math.BigDecimal。

因此,请使用最容易阅读和理解的语言(可能不是 java)。

于 2010-04-23T15:27:18.497 回答
1

如果您的代码的主要核心是大量的 BigDecimal 数学,那么 Java 就不是 IMO 正确的语言。您需要运算符重载。

我希望 Java 的未来版本将允许内置数字类型的系统定义运算符重载,以使这种用例可用。

由于所有这些语言都在 JVM 上运行,因此您当然可以用正确的语言完成高级数学运算,并将 Java 用于其他一切。这将最大限度地减少“学习另一种语言”方面。

于 2010-04-23T15:19:37.903 回答