Java double epsilon

2022-09-02 01:30:01

我目前需要一个类型的epsilon(首选是java库中的常量,而不是自己的实现/定义)double

据我所知,有和作为静态成员。DoubleMIN_VALUEMAX_VALUE

为什么没有?EPSILON

会是什么?epsilon<double>

与 ?std::numeric_limits< double >::epsilon()

Epsilon:1 与数据类型可表示的大于 1 的最小值之间的差值。


答案 1

我假设你的意思是 epsilon 在值的错误意义上。即这个

如果是这样,那么在Java中它被称为ULP(最后一个位置的单位)。您可以使用包和方法找到它。在这里看到javadocsjava.lang.MathMath.ulp()

该值不会存储为静态成员,因为它会根据您关注的双精度值而有所不同。

编辑:根据OP现在对epsilon的定义,值1.0的双精度的ULP是2.220446049250313E-16,表示为双精度。(即 的返回值。Math.ulp(1.0)


答案 2

通过编辑问题,解释的含义,问题现在很清楚,但最好指出以下几点:EPSILON

我相信最初的问题是由这样一个事实触发的:在C中有一个常量,在标准头文件中定义,它捕获了问题所指的内容。同一个标准头文件包含常量 和 的定义,它们分别与 Java 中的 和 明确对应。因此,很自然地假设Java,通过类比,也应该包含与C中具有相同含义的东西的定义。更奇怪的是,C#确实包含一个定义,但它具有不同的含义,即在C中被常量覆盖,在Java中被覆盖。当然,这种情况可能会导致一些混乱,因为它使该术语变得模棱两可。DBL_EPSILONfloat.hDBL_MINDBL_MAXDouble.MIN_VALUEDouble.MAX_VALUEDouble.EPSILONDBL_EPSILONdouble.EPSILONDBL_MINDouble.MIN_VALUEEPSILON