Exemple #1
0
BigNum BigNum::operator /(const BigNum& operand) const {
	std::vector<uint8_t> quotient, current;
	bool started = false;
	for (ssize_t i = data.size() - 1; i >= 0; i--) {
		current.push_back(data[i]);
		BigNum bcurrent(current);
		uint8_t q = bcurrent.smallDivide(operand);
		current = (bcurrent - ((operand) * BigNum(q))).toVector();
		if (started or q != 0) {
			started = true;
			quotient.push_back(q);
		}
	}
	return BigNum(quotient, negative xor operand.negative);
}
Exemple #2
0
void eval_shield(pawn_entry_t *p, int *scoremg)
{ int current, min, penalty;
  uint8 castle;
  if(pos->pcount[BQ])
  { min = INF;
    current = wcurrent(p, pos->ksq[W]);
    castle = pos->castle & ~(BLACK_OO|BLACK_OOO);
    if(castle  & WHITE_OO) min = p->wg1;
    if((castle & WHITE_OOO) && (min > p->wb1)) min = p->wb1;    
    if(castle && (min < current)) penalty = (min + current) / 2;
    else penalty = current;
    *(scoremg) -= penalty;
  }
  if(pos->pcount[WQ])
  { min = INF;
    current = bcurrent(p, pos->ksq[B]);
    castle = pos->castle & ~(WHITE_OO|WHITE_OOO);
    if(castle  & BLACK_OO) min = p->bg8;
    if((castle & BLACK_OOO) && (min > p->bb8)) min = p->bb8;
    if(castle && (min < current)) penalty = (min + current) / 2;
    else penalty = current;
    *(scoremg) += penalty;
  }
}