【发布时间】:2016-04-27 09:21:20
【问题描述】:
有没有办法在评估之前简化分数以避免被零除?
例子:
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。
在我的代码中,x1、x2 和 x3 因子被替换为函数。
【问题讨论】:
-
所以你想得到像
Division by 0这样的编译错误? -
即使在编译时,除以零也会产生 NaN 或 Inf,这有什么帮助?
-
怎么会返回1?您正在将零除以零...
-
抱歉,这完全是错误的。从代数中你应该知道,等式两边都乘以 0,所有信息都会丢失!通过抵消实际上为零的项来“简化”分数也是如此。这是不允许的!
-
您在这里试图解决的真正问题是什么?似乎您已经选择了一个解决方案,它可能不是最好的;)