| 1643 | } |
| 1644 | |
| 1645 | void PositiveAdd(Integer &sum, const Integer &a, const Integer& b) |
| 1646 | { |
| 1647 | word carry; |
| 1648 | if (a.reg.size == b.reg.size) |
| 1649 | carry = Add(sum.reg, a.reg, b.reg, a.reg.size); |
| 1650 | else if (a.reg.size > b.reg.size) |
| 1651 | { |
| 1652 | carry = Add(sum.reg, a.reg, b.reg, b.reg.size); |
| 1653 | CopyWords(sum.reg+b.reg.size, a.reg+b.reg.size, a.reg.size-b.reg.size); |
| 1654 | carry = Increment(sum.reg+b.reg.size, a.reg.size-b.reg.size, carry); |
| 1655 | } |
| 1656 | else |
| 1657 | { |
| 1658 | carry = Add(sum.reg, a.reg, b.reg, a.reg.size); |
| 1659 | CopyWords(sum.reg+a.reg.size, b.reg+a.reg.size, b.reg.size-a.reg.size); |
| 1660 | carry = Increment(sum.reg+a.reg.size, b.reg.size-a.reg.size, carry); |
| 1661 | } |
| 1662 | |
| 1663 | if (carry) |
| 1664 | { |
| 1665 | sum.reg.CleanGrow(2*sum.reg.size); |
| 1666 | sum.reg[sum.reg.size/2] = 1; |
| 1667 | } |
| 1668 | sum.sign = Integer::POSITIVE; |
| 1669 | } |
| 1670 | |
| 1671 | void PositiveSubtract(Integer &diff, const Integer &a, const Integer& b) |
| 1672 | { |