gpt4 book ai didi

c++ - 在编译时简化分数以避免被零除

转载 作者:行者123 更新时间:2023-11-28 05:42:09 25 4
gpt4 key购买 nike

有没有办法在评估之前简化分数以避免被零除?

例子:

double x1 = 2;
double x2 = 2;
double x3 = 2;

double r1 = (x1-x2)/(x1-x2-x3);
cout << r1 << endl;
x3 = 0;
r1 = (x1-x2)/(x1-x2-x3);
cout << r1 << endl;

将返回:

-0
-nan

是否可以让编译器在编译时简化第二个表达式以避免被零除?特别是,如果 x3 等于 0,我希望 (x1-x2)/(x1-x2-x3) 简化为 1。

在我的代码中,因子 x1x2x3 被函数替换。

最佳答案

我已经在评论中声明了以下内容(这可能听起来有点粗鲁,但这只是因为我认为消除这种误解真的很重要):您不能通过简单地重新排列分数或进行取消来避免被零除。要了解这是为什么,请考虑以下示例:

 x/y

这不一样

 (0*x) / (0*y)

因为这会显着改变分数的值。一般来说

 x/y = (a*x) / (a*y)

为真,仅当 a 不为 0 时。另一种看待这一点的方法是考虑方程式和可能的变换。考虑

a = b

这绝对不一样

0*a = 0*b

但是

(a = b)  is equivalent to (a*x = b*x) 

仅当 x 不为 0 时成立。

如果你想避免被零除,唯一的方法是检查除数是否为 0 并以某种方式处理这种情况。您不能通过取消 0 来避免被零除,因为这会改变分数的值。

关于c++ - 在编译时简化分数以避免被零除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36885533/

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