【发布时间】:2023-03-08 20:51:01
【问题描述】:
我为生活编写货币交易应用程序,所以我必须处理货币值(遗憾的是,Java 仍然没有十进制浮点类型并且没有任何东西支持任意精度的货币计算)。 “使用 BigDecimal!” ——你可能会说。我愿意。但是现在我有一些代码,其中性能是问题,BigDecimal 比 double 原语慢 1000 倍以上(!)。
计算非常简单:系统所做的是多次计算a = (1/b) * c(其中a、b 和c 是定点值)。然而,问题在于这个(1/b)。我不能使用定点算术,因为没有定点。而BigDecimal result = a.multiply(BigDecimal.ONE.divide(b).multiply(c) 不仅丑陋,而且非常缓慢。
我可以用什么来代替 BigDecimal?我需要至少 10 倍的性能提升。我发现 JScience library 具有任意精度的算法,但它甚至比 BigDecimal 还要慢。
有什么建议吗?
【问题讨论】:
-
如果b和c的值变化不大,你可以记住这些值。
-
奇怪的是,这在 C 语言中更简单。只需链接到 BCD 库就可以了!
-
我记得参加过 IBM 的销售演示,内容是 BigDecimal 的硬件加速实现。因此,如果您的目标平台是 IBM System z 或 System p,您可以无缝地利用它。
-
一点也不奇怪,Java 使常见任务变得更容易,而大十进制并不常见。
-
别笑,但一种解决方案是使用 PHP。我刚刚在调查我从 PHP 转换为 Java 的小程序在 Java 中比 PHP 慢得多的原因时发现了这个帖子。
标签: java optimization currency math bigdecimal