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

乘法时能否将0.99999999999舍入为1.0?

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

乘法时能否将0.99999999999舍入为1.0?

如果将1.0以下的最大值乘以

someInt
(> 0),结果将永远不会是
someInt

可以对整数进行彻底测试,如下所示:

Double greatestLessThanOne = Double.longBitsToDouble(4607182418800017407L);// Assert that greatestLessThanOne is indeed the largest double less than 1.//assert 1.0 == greatestLessThanOne + Math.ulp(greatestLessThanOne);for (int i = 1; i >= 0; i++)    if ((int) (greatestLessThanOne * i) == i)        System.out.println("Exception found: " + i);

该代码段不产生任何输出。

Math.ulp
返回给定double和double值之间的距离,此距离随后在幅度上更大。因此,该断言确保
greatestLessThanOne
确实是小于1.0的最大值。)

换句话说,你的线

Object element = elementArray[(int)(Math.random() * elementArray.length)];

永远不会引发ArrayIndexOutOfBoundsException。


此外,根据Mark Dickinsons在此处的评论,当乘以double时也是如此。

通过采用舍入至最接近模式的IEEE 754浮点运算,可以显示

x * y <
y
x <1.0
以及任何非微小正数
y
。(如果
y
它是次普通数或最小的正普通数,则可能会失败。)



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

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

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