通过减去两个不相等的浮点数可以得到0吗

原文链接:https://www.it566.top/index.php/wenzhang/java/2021/03/25/78400/

在下面的例子中,有可能被0除(或无穷大)吗?

1
2
3
4
5
6
7
8
9
10
11
public double calculation(double a, double b)
{
     if (a == b)
     {
         return 0;
     }
     else
     {
         return 2 / (a - b);
     }
}

当然,在正常情况下不会。但是如果a和b很接近,由于计算的精确性,结果可能为0

虽然这个问题是针对Java的,但我认为它适用于大多数编程语言。

在java中,a – b永远不等于0如果a != b. 这是因为Java遵循IEEE754浮点运算规范。该规范指出:

In particular, the Java programming language requires support of IEEE 754 denormalized floating-point numbers and gradual underflow, which make it easier to prove desirable properties of particular numerical algorithms. Floating-point operations do not “flush to zero” if the calculated result is a denormalized number.

如果使用非规格化数字,相减不相等的数字永远不会产生零,.

对于其他语言,这要视情况而定。例如,在C或C++中,IEEE 754的支持是可选的。

也就是说,即使a!=b, a-b=0仍然是可能的表达式可能2 / (a – b)报错,例如用a = 5e-308和b = 4e-308.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值