![]() |
1
3
你几乎可以肯定地除以0
一个简单的程序
还有指纹
在我的系统上。
所以,你应该检查一下
@克里斯托:即使左手是零,C++仍然会评估乘法的右手边。结果不重要 应该是 零;重要的是
福
被调用和计算并导致错误。
样本来源:
输出:
|
![]() |
2
1
你有可能被0除吗?可能是整数除以0作为“浮动异常”出现。
当你拥有
你认为它会
|
![]() |
3
1
虽然我没有告诉您浮点异常的确切原因,但我可以提供一些信息,您可能会发现有助于调查将来的浮点错误。我相信 Mark 已经解释了你为什么会有这个问题。 确定是否发生浮点异常条件及其原因的最可移植的方法是使用 fenv.h . 中定义了11个函数 fenv.h 用于操作浮点环境(请参见 fenv(3) man page )你也可能会发现 this article 引起兴趣。
在符合POSIX的系统上,
|
![]() |
4
0
当我建议用乘法1或0替换分支时,我没有考虑到if语句可能会防止数值异常。乘法技巧仍然对表达式求值,但实际上会将其丢弃。对于足够小的表达式,这样的技巧比条件更好,但必须确保表达式可以求值。
如果稍微变换分母,仍然可以使用乘法技巧。
而不是
很抱歉,但请注意我的建议,我不知道你计划的所有细节。另外,我喜欢用“聪明的”布尔表达式替换分支 |
|
user1445218 · 试图查找素数的浮点异常 10 年前 |