Fix subract of short value form long one.
This commit is contained in:
parent
6329549938
commit
8b03550a1e
29
verinum.cc
29
verinum.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: verinum.cc,v 1.16 2000/02/23 04:43:43 steve Exp $"
|
#ident "$Id: verinum.cc,v 1.17 2000/06/12 03:56:51 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "verinum.h"
|
# include "verinum.h"
|
||||||
|
|
@ -445,9 +445,18 @@ verinum operator + (const verinum&left, const verinum&right)
|
||||||
|
|
||||||
verinum operator - (const verinum&left, const verinum&r)
|
verinum operator - (const verinum&left, const verinum&r)
|
||||||
{
|
{
|
||||||
verinum right = v_not(r);
|
verinum right;
|
||||||
unsigned min = left.len();
|
unsigned min = left.len();
|
||||||
if (right.len() < min) min = right.len();
|
if (r.len() < min) {
|
||||||
|
right = verinum(verinum::V0, min);
|
||||||
|
for (unsigned idx = 0 ; idx < r.len() ; idx += 1)
|
||||||
|
right.set(idx, r[idx]);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
right = r;
|
||||||
|
}
|
||||||
|
|
||||||
|
right = v_not(right);
|
||||||
|
|
||||||
unsigned max = left.len();
|
unsigned max = left.len();
|
||||||
if (right.len() > max) max = right.len();
|
if (right.len() > max) max = right.len();
|
||||||
|
|
@ -458,19 +467,19 @@ verinum operator - (const verinum&left, const verinum&r)
|
||||||
for (unsigned idx = 0 ; idx < min ; idx += 1)
|
for (unsigned idx = 0 ; idx < min ; idx += 1)
|
||||||
val.set(idx, add_with_carry(left[idx], right[idx], carry));
|
val.set(idx, add_with_carry(left[idx], right[idx], carry));
|
||||||
|
|
||||||
if (left.len() > right.len()) {
|
assert(left.len() <= right.len());
|
||||||
for (unsigned idx = min ; idx < max ; idx += 1)
|
for (unsigned idx = min ; idx < max ; idx += 1)
|
||||||
val.set(idx,add_with_carry(left[idx], verinum::V0, carry));
|
val.set(idx, add_with_carry(verinum::V0, right[idx], carry));
|
||||||
} else {
|
|
||||||
for (unsigned idx = min ; idx < max ; idx += 1)
|
|
||||||
val.set(idx, add_with_carry(verinum::V0, right[idx], carry));
|
|
||||||
}
|
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: verinum.cc,v $
|
* $Log: verinum.cc,v $
|
||||||
|
* Revision 1.17 2000/06/12 03:56:51 steve
|
||||||
|
* Fix subract of short value form long one.
|
||||||
|
*
|
||||||
* Revision 1.16 2000/02/23 04:43:43 steve
|
* Revision 1.16 2000/02/23 04:43:43 steve
|
||||||
* Some compilers do not accept the not symbol.
|
* Some compilers do not accept the not symbol.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue