7

我正在争论是使用 BigDecimal 和 BigInteger 还是只使用 BigDecimal 来让我的生活更轻松,减少来回转换。仅在资源方面使用 BigDecimal 有缺点吗?

仅使用原始数据类型和 BigInteger 或仅使用 BigInteger 来让我的生活更轻松,减少来回转换如何?

4

4 回答 4

12

来自:http ://www.javamex.com/tutorials/math/BigDecimal_BigInteger_performance.shtml

请注意,BigDecimal 本质上是 BigInteger 的包装器,它“记住小数点在哪里”。

由于我们习惯于处理数字的方式,作为人类,与整数相比,我们在手工计算非整数时可能不得不“多想一些”(例如,我们可能已经熟记 7 次表以加快速度向上某些计算,但可能不是 0.7 倍表)。但是对于计算机实现而言,操作非整数本质上并不比操作整数更费力,以此类推,BigDecimal 上的方法往往与 BigInteger 上的类似方法执行相似。

于 2013-04-06T19:58:28.460 回答
1

我知道您的问题的标题是“BigDecimal 与 BigInteger 和 BigDecimal 的性能”,但您的一个问题是“如何仅使用原始数据类型和 BigInteger 或仅使用 BigInteger 来制作”。好吧,这是我推荐的:

如果您需要准确度、精确度并且需要处理大量数据(例如庞大的财务数据),那么最好使用 BigDecimal 和 BigInteger 而不是原始类型。BigDecimal 和 BigInteger 的其他几个特征还包括:

  1. 两者都来自不可变对象。
  2. 两者都从 Number 类扩展并实现可比较的接口

现在回到性能方面的主要问题,两者之间的性能差异不大。如果您可以在 BigDecimal 中显示您的信息,只需使用它,这样您就不必将其转换为 BigInteger,但再次查看程序,看看是否始终只使用 BigDecimal 是否有意义。BigInteger 和 BigDecimal 的主要区别在于 BigInteger 支持任意精度的整数,而 BigDecimal 用于任意精度的定点数。

这是我的消息来源,祝你好运:)

纽约大学

科罗拉多大学

于 2013-04-06T21:00:45.867 回答
0

如果您正在开发一个低延迟的应用程序并且每一微秒都很重要,那么 BigDecimal/BigInteger 不适合您。除此之外,BigDecimal/BigInteger 没有明显的影响。

BigDecimal 的预制件低于long, double。BigInteger 及其相应的原语同样适用。

于 2013-04-06T19:57:13.417 回答
-2

如果您非常担心大数字的性能,我会避免使用 JavaBigIntegerBigDecimal喜欢瘟疫。

两者都使用慢速(渐近和相当小的输入)算法进行乘法、除法和基数转换。如果事实证明这是一个瓶颈,你就没有办法用更有效的算法来替换它们,除非你自己编写BigInteger兼容的大数字并进行大的重构。

如果您正在处理大整数,那么在 GMP 和 MPFR 周围使用 Java 包装器可能会好得多。由于 Java 在调用本机方法时所做的事情,这里的“大”可能是几百位数。

于 2013-04-07T01:54:11.400 回答