当前位置: 首页>>代码示例>>C++>>正文


C++ Rational::den方法代码示例

本文整理汇总了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;
}
开发者ID:Dan-Wang,项目名称:xpoly,代码行数:56,代码来源:ldtran.cpp

示例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();
	}
}
开发者ID:Dan-Wang,项目名称:xpoly,代码行数:80,代码来源:example.cpp


注:本文中的Rational::den方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。