Ejemplo n.º 1
0
frac add(frac f1, frac f2) //+
{
	lcf(&f1, &f2);

	f1.num = f1.num + f2.num;

	return f1;
}
Ejemplo n.º 2
0
frac sub(frac f1, frac f2) //-
{
	lcf(&f1, &f2);

	f1.num = f1.num - f2.num;

	return f1;
}
Ejemplo n.º 3
0
  void
  Solver::make_problem_discrete()
  {
    if (problem_quantized == 0)
      throw logic_error("Quantized problem doesn't exist.");

    if (problem_discrete != 0)
      delete problem_discrete;

    problem_discrete = new Problem();

    // add variables
    for (size_t i = 0; i < Problem::VARS_GROUPS_TOTAL; ++i)
    {
      Problem::Vars_group group = Problem::Vars_group(i);
      for (size_t j = 0; j < problem_quantized->get_variables_num(group); ++j)
      {
        Variable& v = problem_quantized->get_variable(group, j);
        if (v.get_type() == Variable::INTEGER)
          problem_discrete->add_variable(group, v);
      }
    }

    // add constraints
    for (size_t i = 0; i < Problem::CONSTRS_GROUPS_TOTAL; ++i)
    {
      Problem::Constrs_group group = Problem::Constrs_group(i);
      size_t real_vars_num = 0;
      size_t vars_num = problem_quantized->get_constraints_vars_num(group);
      for (size_t j = 0; j < vars_num; ++j)
      {
        Variable& v = problem_quantized->get_constraints_var(group, j);
        if (v.get_type() == Variable::REAL)
          ++real_vars_num;
      }
      eliminate_variables(group,
                          real_vars_num,
                          problem_quantized,
                          problem_discrete);
      for (size_t j = 0; j < problem_discrete->get_constraints_num(group); ++j)
      {
        Constraint& c = problem_discrete->get_constraint(group, j);
        vector<int_t> nums;
        for (size_t k = 0; k < problem_discrete->get_constraints_vars_num(group); ++k)
        {
          Variable& v = problem_discrete->get_constraints_var(group, k);
          real_t coeff = c.get_coeff(v);
          if (coeff != 0)
            nums.push_back(coeff.get_den());
        }
        real_t free_member = c.get_free_member();
        if (free_member != 0)
          nums.push_back(free_member.get_den());
        int_t lcf_num = lcf(nums);
        c.mult(lcf_num);
      }
    }
  }