gpt4 book ai didi

c++ - 除以零预防 : Checking the divisor's expression doesn't result in zero vs. 检查除数不为零?

转载 作者:可可西里 更新时间:2023-11-01 18:20:42 25 4
gpt4 key购买 nike

由于减法中的浮点错误,在以下情况下是否可以被零除?

float x, y, z;
...
if (y != 1.0)
z = x / (y - 1.0);

换句话说,下面是不是更安全一些?

float divisor = y - 1.0;
if (divisor != 0.0)
z = x / divisor;

最佳答案

假设 IEEE-754 float ,它们是等价的。

FP 算法的一个基本定理是,对于有限的 x 和 y,x - y == 0 当且仅当 x == y,假设逐渐下溢。

如果次正规结果被刷新为零(而不是逐渐下溢),则只有当结果 x - y 是正规的时,这个定理才成立。因为 1.0 的缩放比例很好,所以 y - 1.0 永远不会低于正规值,因此当且仅当 y 恰好为 1.0 时 y - 1.0 为零,而不管下溢是如何处理的。

当然,C++ 不保证 IEEE-754,但该定理对于大多数“合理的”浮点系统都是正确的。

关于c++ - 除以零预防 : Checking the divisor's expression doesn't result in zero vs. 检查除数不为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com