代码之家  ›  专栏  ›  技术社区  ›  zxcvbnm

在Java中使用BigDeCimple而不是双的权衡

  •  1
  • zxcvbnm  · 技术社区  · 16 年前

    我正在为神经网络编写代码,我想知道我是否应该这样做。实际上,我有点担心,即使使用双,也不能得到好的结果,而且我可能不得不将代码迁移到一种更有效的语言,比如C++。我在这里读到一个问题,bigdecimal比double慢1000倍?那太多了。

    另一方面,我要做的是大量的十进制数的计算,如果能让它更精确,那就更好了。我也不知道精度是否会给它带来问题。我也不认为我见过的任何实现都能做到这一点,所以我可能不会这么做。虽然有时候网络的行为不正常,但我不确定这是一个精确的错误还是它的逻辑问题。

    但我想知道,你们在处理钱的时候只使用bigdecimal吗?有什么想法吗?

    6 回复  |  直到 16 年前
        1
  •  4
  •   erickson    16 年前

    使用Java的 double 神经网络中权重的数据类型似乎非常合适。它是一个很好的工程和科学应用的选择。

    神经网络本质上是近似的。的精度 BigDecimal 在这个应用程序中毫无意义,性能影响除外。储备 大十进制 主要用于金融应用。

        2
  •  0
  •   Stefan Kendall    16 年前

    我在处理货币时使用整数/多头,因为使用任何形式的十进制表示都是荒谬的。你绝对不应该使用双人床,而且你可能想看看那里有一些处理图书馆的钱。

    然而,我记得,货币图书馆是不成熟或不发达的。

        3
  •  0
  •   duffymo    16 年前

    整数值和小数数值的整数,加上货币,就是我们要走的路。要么找个图书馆,要么自己写。

        4
  •  0
  •   matt b    16 年前

    您绝对不应该将浮点十进制数用于固定点金额-如货币。

    在过去,我使用了一个自定义money类,它只包装一个bigdecimal实例——它工作得很好,没有问题。

        5
  •  0
  •   Stephen C    16 年前

    不要 只是使用 BigDecimal / BigInteger 为了钱。相反,他们在需要比可用精度更高的应用程序中使用它们 double long .

    当然,使用 双小数 双整数 以慢得多的算术运算为代价。例如,大数加法是 O(N) 在哪里? N 是数字中的有效位数,乘法是 O(N**2) .

    所以决定是否使用 长的 / 双重的 或者他们的“大”类似物是查看应用程序真正需要的精度。货币应用程序确实需要能够在不损失一分钱的情况下表示价值。其他应用程序对精度同样敏感。

    但坦率地说,我不认为神经网络应用程序需要13位十进制的精度。你的网络行为不正常的原因可能与精度无关。在我看来,这更可能与“真实”的神经网络并不总是按他们应该的方式运行有关。

        6
  •  -1
  •   JoelFan    16 年前

    做你自己的基准,并以此为基础做出决定……“人们说什么”一词也没有意义。