栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

比较Java中相等性的双精度值。

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比较Java中相等性的双精度值。

您可以尝试使用10 -15数量级的增量值,但是您会注意到某些计算会产生较大的舍入误差。此外,您进行的操作越多,累积的舍入误差就越大。

一种特别糟糕的情况是,如果减去两个几乎相等的数字,例如1.0000000001-1.0并将结果与​​0.0000000001进行比较

因此,几乎没有希望找到适用于所有情况的通用方法。您始终必须计算出在特定应用中可以期望的精度,然后如果结果比该精度更接近,则认为结果相等。

例如输出

public class Main {    public static double delta(double d1, double d2) {        return Math.abs(d1- d2) / Math.max(Math.abs(d1), Math.abs(d2));    }    public static void main(String[] args) {        System.out.println(delta(0.1*0.1, 0.01));        System.out.println(delta(1.0000000001 - 1.0, 0.0000000001));    }}

1.7347234759768068E-168.274036411668976E-8

间隔算术可用于跟踪累积的舍入误差。但是实际上,错误间隔过于悲观,因为有时舍入错误也会相互抵消。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号