当前位置: 首页 > 知识库问答 >
问题:

最大精度低于无限?

公冶峰
2023-03-14

我在用BigDecimal做一些计算。最近我遇到:

java.lang.ArithmeticException: 
Non-terminating decimal expansion; no exact representable decimal result.

这个问题的答案贴在这里:算术异常:“非终止十进制扩展;没有精确可表示的十进制结果”

这意味着,有一些除法有无限的小数,所以BigDecimal告诉我它不能精确计算结果。为了避免这种情况,我必须调用BigDecimal。设置刻度(某物,四舍五入模式)

编辑:

现在的问题是将SOMETHING设置为最大可能值。我可以使用精度低于无限的MathContext(MathContext(precision)),但同样的问题也会出现。在MathContext下面需要有一个值。无限。。。

有人知道如何做到这一点吗?

我的第二个问题是:为什么没有大小数。setPrecision()方法?

非常感谢。

奥利弗


共有2个答案

叶景龙
2023-03-14

BigDecimal.setScaleint作为参数

2,147,483,647

但是如上所述,你不应该使用如此巨大的天平。你正在计算的数字会占用大量内存,而没有任何有用的用途。计算这个数字可能需要很长时间。

端木存
2023-03-14

第一个问题: 没有 BigDecimal. UNLIMITED这样的东西。这没有任何意义。比无穷大少一个是什么? 因为文档没有明确提到BigDecimal的默认MathContext,我不得不假设它是MathContext. UNLIMITED。由于您有一个重复的十进制,BigDecimal不能容纳它,即使精度无限。相反,您需要任意选择一个值(比如100或1000——我不知道您使用这些数字做什么)。如果你只关心小数点后的第一位,比如15位,那么如果你跟踪第一位,比如100位,你就不应该有舍入误差。

第二个问题:单独问一个问题。

 类似资料:
  • 我现在用SDL2编程。所有这些都可以正常工作,但我对方法有一个问题。通常,它应该以毫秒为单位返回应用程序的总时间,但它总是在大部分时间返回值0,有时返回值1。 我用标志初始化SDL。 以下代码的问题是循环太快,因此增量时间小于1 ms。是否有方法实现更高的精度?

  • 问题内容: 我试图确定双精度的最大精度是多少。在此链接的可接受答案的注释中,Java中的double保持精度 @PeterLawrey将max precision设置为15。 您如何确定呢? 问题答案: @PeterLawrey表示最大精度为15。 实际上,这根本不是他所说的。他说的是: 双精度有15个小数位 他错了。它们的精度为15个十进制 数字 。 任何数字中的小数位数由其对数10的对数给出。

  • 我试图确定double的最大精度是多少。在这个链接中接受的答案的注释中,Java中的Retain precision with double@PeterLawrey声明max precision In 15。 你如何确定这一点?

  • 当我试图从Spark dataframe收集数据时,我得到一个错误,说明 下面是StackTrace: 警告tasksetmanager:在stage 0.0中丢失任务1.0(TID 1,10..***,executor 0):java.lang.IllegalArgumentException:requirement:Decimal precision 39在scala.predef超过最大精度

  • 在这个例子中,我们为整数以及数字的小数部分设置最小和最大数字。 文件:IOTester.java - 执行上面示例代码,得到以下结果 -

  • 我已经在tensorflow中建立了卷积神经网络,在数据集上对其进行训练,并在看不见的数据上对其进行评估。这样做,我得到了约98%的准确率对看不见的数据<然后我用 并根据相同的数据进行评估,我得到了98%的准确性,但这次我得到了~96%。差别不大,但我觉得也不小。那正常吗? 我已经看到很多次在tenstorflow中,只有权重被导出,而不是偏差,但我不知道它与此有关 这是我的模型结构: