BigDecimal与BigInteger和BigDecimal的性能

时间:2013-04-06 19:49:30

标签: java performance biginteger bigdecimal

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

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

4 个答案:

答案 0 :(得分:10)

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

请注意,BigDecimal本质上是一个围绕BigInteger的包装器,它“记住小数点的位置”。

由于我们习惯于处理数字的方式,作为人类,当用非整数计算与整数相比时,我们可能不得不“多思考”(例如,我们可能已经通过心脏加速某些计算,但可能不是.7倍表)。但是对于计算机实现来说,操作非整数本质上并不比整数更省力,因此总的来说,BigDecimal上的方法往往与BigInteger上的类比方法类似。

答案 1 :(得分:0)

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

BigDecimal的预制格式低于longdouble。与BigInteger相同的苹果及其相应的原语。

答案 2 :(得分:0)

我知道您的问题的标题是“BigDecimal与BigInteger和BigDecimal的性能”,但您的一个问题是“如何仅使用原始数据类型和BigInteger或仅使用BigInteger”。那么这就是我的建议:

如果您需要准确性,精确度以及大量财务数据等工作,那么最好使用BigDecimal和BigInteger而不是原始类型。 BigDecimal和BigInteger的其他特性也很少:

  1. 两者都来自不可变对象。
  2. 两者都从Number类扩展并实现类似的接口
  3. 现在回到主要问题的表现,两者之间的表现没有太大区别。如果您可以在BigDecimal中显示您的信息,那么您不必将其转换为BigInteger,而是再次查看该程序,看看是否一直只使用BigDecimal。 BigInteger和BigDecimal之间的主要区别在于BigInteger支持任意精度整数,BigDecimal用于任意精度定点数。

    以下是我的消息来源并祝你好运:)

    NY University

    Colorado University

答案 3 :(得分:-1)

如果您对大数字的表现非常担心,我会像瘟疫一样避免使用Java BigIntegerBigDecimal

两者都使用慢速(渐近和合理小输入)算法进行乘法,除法和基数转换。如果它被证明是一个瓶颈,你没有办法用更有效的算法替换它们,而不是编写你自己的BigInteger兼容的大数字并做一个大的重构。

如果您正在处理大整数,那么使用围绕GMP和MPFR的Java包装器可能要好得多。 "大"这可能是几百位数,因为Java在调用本机方法时所做的事情。