本文整理汇总了C++中Rational::den方法的典型用法代码示例。如果您正苦于以下问题:C++ Rational::den方法的具体用法?C++ Rational::den怎么用?C++ Rational::den使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Rational
的用法示例。
在下文中一共展示了Rational::den方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: genofst
//Generate offset of bound
bool GEN_C::genofst(OUT CHAR sbuf[], IN RMat & ofst)
{
ASSERT(m_is_init == true, ("not yet initialized"));
if (ofst.size() == 0 || ofst.is_rowequ(0, 0)) {
return false;
}
ASSERT(ofst.is_rowvec(),
("should be only one-dimension for each of loop level"));
CHAR tmpbuf[TMP_BUF_LEN];
/*
Common low denominator to reduce division
e.g: Given expression is i + (3/2)*j + (1/2)*k, then transformed to
(2*i + 3*j + k) / 2
CASE: The method may incur integer overflow exception.
e.g: i is a larger number, and 1/2*i + 1/30*j will be transformed to
(15*i + j)/30, notes that 15*i may cause integer overflow but the
old code is not.
*/
ofst.comden(0, 0);
INT comden = ofst.get(0,0).den();
ASSERT(comden > 0, ("unnormalized"));
if (comden != 1) {
xstrcat(sbuf, m_sbufl, "(");
}
bool hasv = false;
for (UINT j = 0; j < ofst.get_col_size(); j++) {
Rational o = ofst.get(0, j);
if (o == 0) {
continue;
}
ASSERT(comden == o.den() && o.den() > 0, ("should be equal"));
if (hasv) {
xstrcat(sbuf, m_sbufl, "+");
}
if (o.num() == 1) {
xstrcat(sbuf, m_sbufl, "%s", get_newvar_sym(tmpbuf, j));
} else if (o.num() == -1) {
xstrcat(sbuf, m_sbufl, "(-%s)", get_newvar_sym(tmpbuf, j));
} else {
xstrcat(sbuf, m_sbufl, "(%d*%s)", o.num(),
get_newvar_sym(tmpbuf, j));
}
hasv = true;
}
if (comden != 1) {
xstrcat(sbuf, m_sbufl, ")/%d", comden);
}
return hasv;
}
示例2: solve_linear_program
//This function demostrate how to use SIX to compute maxmium and minmum solution.
void solve_linear_program()
{
/*
Given system has 5 variable, v0, v1, v2, v3, v4.
linear inequality:
v0 >= 10
v0 + v1 >= 8
v0 + v1 + v2 >= 9
v0 + v1 + v2 + v3 >= 11
v1 + v2 + v3 + v4 >= 13
v2 + v3 + v4 >= 8
v3 + v4 >= 5
v4 >= 3
variable constrain:
v0 >= 0
v1 >= 0
v2 >= 0
v3 >= 0
v4 >= 0
target function:
min=v0+v1+v2+v3+v4
*/
Rational v; //maximum or minimum result value.
RMat leq(8,6); //linear inequality.
RMat eq; //linear equality.
RMat tgtf(1,6); //target function.
RMat vc(5,6); //variable constrain.
RMat res; //result solution.
tgtf.sete(6, //indicate tgtf has 6 elements.
1, 1, 1, 1, 1, 0); //
leq.sete(48,
-1,0,0,0,0, -10,
-1,-1,0,0,0, -8,
-1,-1,-1,0,0, -9,
-1,-1,-1,-1,0, -11,
0,-1,-1,-1,-1, -13,
0,0,-1,-1,-1, -8,
0,0,0,-1,-1, -5,
0,0,0,0,-1, -3);
vc.sete(30,
-1,0,0,0,0, 0,
0,-1,0,0,0, 0,
0,0,-1,0,0, 0,
0,0,0,-1,0, 0,
0,0,0,0,-1, 0);
SIX<RMat, Rational> six;
//Dump to check.
tgtf.dumps();
vc.dumps();
eq.dumps();
leq.dumps();
//solution is unbound
if (SIX_SUCC != six.maxm(v, res,tgtf,vc,eq,leq)) {
printf("\nunbound");
} else {
printf("\nmax val:%d/%d",v.num(), v.den());
res.dumps();
}
/*
min val:23
solution is:v0=10 v1=5 v2=3 v3=2 v4=3 v5=1
*/
if (SIX_SUCC != six.minm(v, res,tgtf,vc,eq,leq)) {
//res is unbound!!
printf("\nunbound");
} else {
printf("\nmin val:%d/%d",v.num(), v.den());
res.dumps();
}
}