Java 尽可能接近0的两倍?

Java 尽可能接近0的两倍?,java,floating-point,double,Java,Floating Point,Double,我需要一个尽可能接近0的值。我需要能够除以这个值,但实际上应该是0 Java是否提供了一种只使用最低有效位集生成double的简单方法?还是我必须自己计算 //编辑:一点背景信息,因为有人要求。我知道我的解决方案不是特别干净,但给你: 我正在写一个家庭作业程序。它计算由并联和串联电路中的多个电阻器组成的电路的电阻 这是一个二年级的编程课程。我们的老师还在为我们设计课程,我们需要按照他的设计来实施 并联电路涉及计算1/*电阻*,因此我的程序禁止创建0欧姆的电阻。物理学告诉你无论如何这是不可能的(

我需要一个尽可能接近0的值。我需要能够除以这个值,但实际上应该是0

Java是否提供了一种只使用最低有效位集生成double的简单方法?还是我必须自己计算


//编辑:一点背景信息,因为有人要求。我知道我的解决方案不是特别干净,但给你:

我正在写一个家庭作业程序。它计算由并联和串联电路中的多个电阻器组成的电路的电阻

这是一个二年级的编程课程。我们的老师还在为我们设计课程,我们需要按照他的设计来实施

并联电路涉及计算
1/*电阻*
,因此我的程序禁止创建0欧姆的电阻。物理学告诉你无论如何这是不可能的(你在每种金属中只有一点点电阻)

然而,我们应该用来测试程序的示例电路包含一个0欧姆电阻。它被放置在一个串行电路中,但是电阻器不知道它们在哪里(老师是这样设计的),所以我不能改变我的程序,只允许在串行电路中使用电阻为0欧姆的电阻器

两种解决方案:

  • 允许在任何情况下电阻为0欧姆-如果发生除0,那么,运气不好
  • 将电阻器设置为可以忽略的电阻,而不是0
  • 两者都不是很好。第一个对我来说似乎不太好,第二个也不太好,但我必须做出决定

    这只是一个随机选择,提出了这个问题。我不能不解决它就放手,所以切换到第一个不再是一种选择;-)

    使用:

    一种常数,它包含
    double
    ,2-1074类型的最小正非零值。它等于十六进制浮点值
    0x0.0000000000001P-1022
    ,也等于
    Double.longBitsToDouble(0x1L)


    如果你想除以“零”,你实际上可以使用Double.POSITIVE _∞作为结果。

    我一直认为minu值是负数。但是如果你(和文件)这么说…@fNek在我第一次查看文档之前,我也这么认为对于任何来到这里的.NET开发人员:使用
    Double.MinValue
    是一个非常大的负数。当然,如果你除以
    Double.minu VALUE
    ,那么你几乎可以保证溢出?这不是我的意思。由于其他原因,这个值必须为零,但我恰好必须除以它。当然是双精度。正无穷大?只适用于大于0的分子。[fifteenzeros]1。当你说“我需要能够除以这个值”时,你的意思是不产生NaN,还是不产生溢出?因为几乎任何有限值除以最小的正非零双精度将产生溢出,而不会产生NaN。在我的例子中,我完全不在乎溢出。如果能听到更多关于为什么需要这个的信息,我会很感兴趣。听起来有点老套。最接近零的值可能是零。如果需要,我可以写一个证明。如果被除数是
    1
    ,这是根据您的额外信息,那么您可以安全地使用
    +0.0
    作为除数。结果将不是
    NaN
    ,而是
    +inf
    ,它将按照您在其余计算中从正无穷远处所期望的那样工作(特别是
    1.0/(1.0/+0.0)==+0.0
    。在IEEE 754算术中不禁止用零除。不需要替换几乎为零的值。