本文整理汇总了C++中Real::MSB方法的典型用法代码示例。如果您正苦于以下问题:C++ Real::MSB方法的具体用法?C++ Real::MSB怎么用?C++ Real::MSB使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Real
的用法示例。
在下文中一共展示了Real::MSB方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: computeExactFlags_temp
void computeExactFlags_temp(ConstRep* t, const Real &value) {
// Chen Li: the following is incorrect:
// uMSB = lMSB = value.MSB();
// because the value could be a BigFloat which is an interval.
if (value.isExact()) {
t->uMSB() = t->lMSB() = value.MSB();
} else {
t->uMSB() = value.uMSB();
t->lMSB() = value.lMSB();
core_error("Leaves in DAG is not exact!", __FILE__, __LINE__, true);
}
t->sign() = value.sign();
// t->length() = value.length();
t->measure() = value.height(); // for rationals and integers,
// measure = height.
// BFMSS[2,5] bound.
value.ULV_E(t->u25(), t->l25(), t->v2p(), t->v2m(), t->v5p(), t->v5m());
// The original BFMSS parameters can be set from the BFMSS[2,5] parameters.
// Here we just need them locally.
extLong u_e = t->u25() + t->v2p() + ceilLg5(t->v5p());
extLong l_e = t->l25() + t->v2m() + ceilLg5(t->v5m());
#ifdef ORIGINAL_BFMSS
// To go back to the original BFMSS :
t->u25() = u_e;
t->l25() = l_e;
t->v2p() = t->v2m() = t->v5p() = t->v5m() = EXTLONG_ZERO;
#elif defined BFMSS_2_ONLY
// To go back to BFMSS[2] only :
t->u25() = t->u25() + ceilLg5(t->v5p());
t->l25() = t->l25() + ceilLg5(t->v5m());
t->v5p() = t->v5m() = EXTLONG_ZERO;
#endif
if (l_e == EXTLONG_ZERO) { // no divisions introduced
t->high() = u_e;
t->low() = EXTLONG_ONE - u_e; // - (u_e - 1)
} else {
t->high() = u_e - l_e + EXTLONG_ONE;
t->low() = EXTLONG_TWO - t->high();
}
t->lc() = l_e;
t->tc() = u_e;
// set BigRat value
if (rationalReduceFlag) {
t->ratFlag() = 1;
t->ratValue() = new BigRat(value.BigRatValue());
}
t->flagsComputed() = true;
}