下面是 C++ 中的代码,
Num *= other.Den;
Den *= other.Num;
if (Den.isNegative()) {
Num = -Num;
Den = -Den;
}
assert(Den.isStrictlyPositive());
其中 Num 和 Den 的类型为 LLVM::APInt。
由于某种原因,我的断言失败了。我已经检查了分母是否明确为负并将其变为正。有人可以让我在这段代码中的什么情况下,断言会失败吗?当我针对测试用例运行我的代码时,它失败了。测试用例非常大,我没有成功拐弯一个特定的案例。上面的代码是我的算法的一部分,它正在做其他工作。
这是 isStrictlyPositive 的实现。它使用 LLVM 库文件 APInt.h。
bool isStrictlyPositive() const {
return isNonNegative() && !!*this;
}
bool isNonNegative() const {
return !isNegative();
}