2014-01-28 54 views
4

我需要一个尽可能接近0的值。我需要能够划分这个值,但它应该是有效的0.双尽可能接近0?

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


//编辑:有点背景信息,因为有人请求它。我知道我的灵魂不是特别干净,但你在这里:

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

这是一个二年级的编程课。我们的老师仍然为我们设计课程,我们需要根据他的设计来实施课程。

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

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

两个解决方案:

  1. 允许0欧姆电阻器在任何情况下 - 如果除以0时,好,坏运气
  2. 设置电阻不为0,但阻力可以忽略。

两者都不是很好。第一个对我来说似乎不太好,第二个也不好,但我不得不决定。

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

+2

当你说“我需要能够分裂这个值”时,你的意思是没有产生NaN,或者没有产生溢出?因为将几乎任何有限的值除以最小的正非零双将产生溢出。 –

+1

不生产NaN。我不能不在乎我的情况下溢出。 – fNek

+1

听到更多关于你为什么需要这个的信息会很有趣。这听起来有点冒失。 –

回答

15

使用Double.MIN_VALUE

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

+0

我一直认为MIN_VALUE是负数,但是如果你(和文档)这么说... – fNek

+2

@fNek我也认为,在我第一次查看文档之前。:) –

+3

对于任何.NET开发人员来到这里:使用[Double.Epsilon](http:// msdn .microsoft.com/EN-US /库/ system.double.epsilon%28V = vs.110%29.aspx)。 'Double.MinValue'是一个非常大的负数。 –

0

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

+0

这不是我的意思。由于其他原因,该值必须为零,但我恰好必须除以它。 – fNek

+2

肯定Double.POSITIVE_INFINITY? –

+0

只适用于大于0的分子。[十五分之一]但是。 –