繁体   English   中英

Java 1.6中的Epsilon

[英]Epsilon in Java 1.6

我作为顾问从事名为Oracle RPAS的产品的工作,并且该应用程序是使用C ++开发的。 在Oracle RPAS中,可以对定制开发的Java程序进行JNI调用以处理数据。 存储在Oracle RPAS for Real中的数据始终为Double(8字节),而Java中也可用。 不幸的是,即使数据以Double形式存储在数据库中,Oracle RPAS仍将0.0000000001(1e-09)的硬编码值用作epsilon来比较double和其他计算。 在Java中,我无法找到一种使代码与此硬编码值对齐的方法。 我需要以类似的方式比较数据集。 这些是数学运算,我需要主要执行min(double x,double Y),max(double x,double Y)round(double x * double Y)/ double Y),ceil,floor等。

我需要帮助来了解epsilon如何在Java中工作吗? 用于开发的Java版本是1.6

我不是Java方面的专家,并且在Java方面有一定的编码经验,任何起点都将有助于解决此问题。

epsilon的整个思想应基于您的应用程序逻辑。 如果要处理的数据直到小数点后三位都应该有值,请使用像0.0001这样的epsilon。 或类似地,如果您知道您的应用程序将要处理的数字高达十亿(1,000,000,000),则您知道double最多可以精确到小数点后5-6位(15个有效数字减去十进制前的10位数字)。 因此,选择0.000001作为epsilon是合理的。

据我所知,Java在双重比较期间不进行任何内部epsilon处理。 就像编写C / C ++一样,它需要显式完成。

当然,您也可以将BigDecimal视为替代方案。 但是,在执行BigDecimal算术时,您仍然需要定义要保持的精度,并使用类似epsilon的相似推理。

在Java中,您使用BigDecimal而不是Double,那么您根本不需要使用任何epsilon。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM