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