fixed: template Big::FromBig(const Big<another_exp, another_man> & another)
didn't correctly set the exponent (when the mantisses had different size - when 'man' was different from 'another_man') this had impact on operator= too sample: Big<2,3> a = 100; Big<3,5> b; b = a; // b had a wrong value git-svn-id: svn://ttmath.org/publicrep/ttmath/trunk@106 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
460608859c
commit
3899b8631c
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2006-2008, Tomasz Sowa
|
Copyright (c) 2006-2009, Tomasz Sowa
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1630,6 +1630,7 @@ public:
|
||||||
|
|
||||||
uint man_len_min = (man < another_man)? man : another_man;
|
uint man_len_min = (man < another_man)? man : another_man;
|
||||||
uint i;
|
uint i;
|
||||||
|
uint c = 0;
|
||||||
|
|
||||||
for( i = 0 ; i<man_len_min ; ++i )
|
for( i = 0 ; i<man_len_min ; ++i )
|
||||||
mantissa.table[man-1-i] = another.mantissa.table[another_man-1-i];
|
mantissa.table[man-1-i] = another.mantissa.table[another_man-1-i];
|
||||||
|
@ -1637,10 +1638,31 @@ public:
|
||||||
for( ; i<man ; ++i )
|
for( ; i<man ; ++i )
|
||||||
mantissa.table[man-1-i] = 0;
|
mantissa.table[man-1-i] = 0;
|
||||||
|
|
||||||
// mantissa is standardized
|
|
||||||
//c += Standardizing();
|
|
||||||
|
|
||||||
return 0;
|
// MS Visual Express 2005 reports a warning (in the lines with 'uint man_diff = ...'):
|
||||||
|
// warning C4307: '*' : integral constant overflow
|
||||||
|
// but we're using 'if( man > another_man )' and 'if( man < another_man )' and there'll be no such a situation here
|
||||||
|
#pragma warning( disable: 4307 )
|
||||||
|
|
||||||
|
if( man > another_man )
|
||||||
|
{
|
||||||
|
uint man_diff = (man - another_man) * TTMATH_BITS_PER_UINT;
|
||||||
|
c += exponent.SubInt(man_diff, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( man < another_man )
|
||||||
|
{
|
||||||
|
uint man_diff = (another_man - man) * TTMATH_BITS_PER_UINT;
|
||||||
|
c += exponent.AddInt(man_diff, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma warning( default: 4307 )
|
||||||
|
|
||||||
|
|
||||||
|
// mantissa doesn't have to be standardized (either the highest bit is set or all bits are equal zero)
|
||||||
|
CorrectZero();
|
||||||
|
|
||||||
|
return (c == 0 )? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue