removed: macro TTMATH_REFERENCE_ASSERT from all methods from public interface
git-svn-id: svn://ttmath.org/publicrep/ttmath/trunk@314 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
996fac15f1
commit
a67a088e3a
|
@ -1,4 +1,4 @@
|
||||||
Version 0.9.2 prerelease (2010.09.19):
|
Version 0.9.2 prerelease (2010.09.21):
|
||||||
* fixed: Big::Add() sometimes incorrectly rounded the last bit from its mantissa
|
* fixed: Big::Add() sometimes incorrectly rounded the last bit from its mantissa
|
||||||
* fixed: Big::BigAnd() Big::BigOr() Big::BigXor() should have set NaN
|
* fixed: Big::BigAnd() Big::BigOr() Big::BigXor() should have set NaN
|
||||||
when the argument was negative (they only returned 2)
|
when the argument was negative (they only returned 2)
|
||||||
|
@ -59,6 +59,7 @@ Version 0.9.2 prerelease (2010.09.19):
|
||||||
* removed: macro TTMATH_RELEASE
|
* removed: macro TTMATH_RELEASE
|
||||||
for debug version define TTMATH_DEBUG macro
|
for debug version define TTMATH_DEBUG macro
|
||||||
TTMATH_DEBUG is also automatically defined when DEBUG or _DEBUG is set
|
TTMATH_DEBUG is also automatically defined when DEBUG or _DEBUG is set
|
||||||
|
* removed: macro TTMATH_REFERENCE_ASSERT from all methods from public interface
|
||||||
|
|
||||||
|
|
||||||
Version 0.9.1 (2010.02.07):
|
Version 0.9.1 (2010.02.07):
|
||||||
|
|
|
@ -1265,15 +1265,13 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
public:
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
multiplication this = this * ss2
|
multiplication this = this * ss2
|
||||||
this method returns a carry
|
this method returns a carry
|
||||||
*/
|
*/
|
||||||
uint Mul(const Big<exp, man> & ss2, bool round = true)
|
uint MulRef(const Big<exp, man> & ss2, bool round = true)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( ss2 )
|
TTMATH_REFERENCE_ASSERT( ss2 )
|
||||||
|
|
||||||
|
@ -1336,6 +1334,29 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
multiplication this = this * ss2
|
||||||
|
this method returns a carry
|
||||||
|
*/
|
||||||
|
uint Mul(const Big<exp, man> & ss2, bool round = true)
|
||||||
|
{
|
||||||
|
if( this == &ss2 )
|
||||||
|
{
|
||||||
|
Big<exp, man> copy_ss2(ss2);
|
||||||
|
return MulRef(copy_ss2, round);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return MulRef(ss2, round);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
division this = this / ss2
|
division this = this / ss2
|
||||||
|
|
||||||
|
@ -1344,7 +1365,7 @@ public:
|
||||||
1 - carry (in a division carry can be as well)
|
1 - carry (in a division carry can be as well)
|
||||||
2 - improper argument (ss2 is zero)
|
2 - improper argument (ss2 is zero)
|
||||||
*/
|
*/
|
||||||
uint Div(const Big<exp, man> & ss2, bool round = true)
|
uint DivRef(const Big<exp, man> & ss2, bool round = true)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( ss2 )
|
TTMATH_REFERENCE_ASSERT( ss2 )
|
||||||
|
|
||||||
|
@ -1407,24 +1428,36 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
the remainder from a division
|
division this = this / ss2
|
||||||
|
|
||||||
e.g.
|
|
||||||
12.6 mod 3 = 0.6 because 12.6 = 3*4 + 0.6
|
|
||||||
-12.6 mod 3 = -0.6 bacause -12.6 = 3*(-4) + (-0.6)
|
|
||||||
12.6 mod -3 = 0.6
|
|
||||||
-12.6 mod -3 = -0.6
|
|
||||||
|
|
||||||
it means:
|
|
||||||
in other words: this(old) = ss2 * q + this(new)
|
|
||||||
|
|
||||||
return value:
|
return value:
|
||||||
0 - ok
|
0 - ok
|
||||||
1 - carry
|
1 - carry (in a division carry can be as well)
|
||||||
2 - improper argument (ss2 is zero)
|
2 - improper argument (ss2 is zero)
|
||||||
*/
|
*/
|
||||||
uint Mod(const Big<exp, man> & ss2)
|
uint Div(const Big<exp, man> & ss2, bool round = true)
|
||||||
|
{
|
||||||
|
if( this == &ss2 )
|
||||||
|
{
|
||||||
|
Big<exp, man> copy_ss2(ss2);
|
||||||
|
return DivRef(copy_ss2, round);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return DivRef(ss2, round);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the remainder from a division
|
||||||
|
*/
|
||||||
|
uint ModRef(const Big<exp, man> & ss2)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( ss2 )
|
TTMATH_REFERENCE_ASSERT( ss2 )
|
||||||
|
|
||||||
|
@ -1456,6 +1489,58 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the remainder from a division
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
12.6 mod 3 = 0.6 because 12.6 = 3*4 + 0.6
|
||||||
|
-12.6 mod 3 = -0.6 bacause -12.6 = 3*(-4) + (-0.6)
|
||||||
|
12.6 mod -3 = 0.6
|
||||||
|
-12.6 mod -3 = -0.6
|
||||||
|
|
||||||
|
it means:
|
||||||
|
in other words: this(old) = ss2 * q + this(new)
|
||||||
|
|
||||||
|
return value:
|
||||||
|
0 - ok
|
||||||
|
1 - carry
|
||||||
|
2 - improper argument (ss2 is zero)
|
||||||
|
*/
|
||||||
|
uint Mod(const Big<exp, man> & ss2)
|
||||||
|
{
|
||||||
|
if( this == &ss2 )
|
||||||
|
{
|
||||||
|
Big<exp, man> copy_ss2(ss2);
|
||||||
|
return ModRef(copy_ss2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ModRef(ss2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
this method returns: 'this' mod 2
|
||||||
|
(either zero or one)
|
||||||
|
|
||||||
|
this method is much faster than using Mod( object_with_value_two )
|
||||||
|
*/
|
||||||
|
uint Mod2() const
|
||||||
|
{
|
||||||
|
if( exponent>sint(0) || exponent<=-sint(man*TTMATH_BITS_PER_UINT) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
sint exp_int = exponent.ToInt();
|
||||||
|
// 'exp_int' is negative (or zero), we set it as positive
|
||||||
|
exp_int = -exp_int;
|
||||||
|
|
||||||
|
return mantissa.GetBit(exp_int);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
power this = this ^ pow
|
power this = this ^ pow
|
||||||
(pow without a sign)
|
(pow without a sign)
|
||||||
|
@ -1549,26 +1634,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
this method returns: 'this' mod 2
|
|
||||||
(either zero or one)
|
|
||||||
|
|
||||||
this method is much faster than using Mod( object_with_value_two )
|
|
||||||
*/
|
|
||||||
uint Mod2() const
|
|
||||||
{
|
|
||||||
if( exponent>sint(0) || exponent<=-sint(man*TTMATH_BITS_PER_UINT) )
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
sint exp_int = exponent.ToInt();
|
|
||||||
// 'exp_int' is negative (or zero), we set it as positive
|
|
||||||
exp_int = -exp_int;
|
|
||||||
|
|
||||||
return mantissa.GetBit(exp_int);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
power this = this ^ abs([pow])
|
power this = this ^ abs([pow])
|
||||||
pow is treated as a value without a sign and without a fraction
|
pow is treated as a value without a sign and without a fraction
|
||||||
|
@ -1642,8 +1707,6 @@ public:
|
||||||
*/
|
*/
|
||||||
uint PowInt(const Big<exp, man> & pow)
|
uint PowInt(const Big<exp, man> & pow)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( pow )
|
|
||||||
|
|
||||||
if( IsNan() || pow.IsNan() )
|
if( IsNan() || pow.IsNan() )
|
||||||
return CheckCarry(1);
|
return CheckCarry(1);
|
||||||
|
|
||||||
|
@ -1680,8 +1743,6 @@ public:
|
||||||
*/
|
*/
|
||||||
uint PowFrac(const Big<exp, man> & pow)
|
uint PowFrac(const Big<exp, man> & pow)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( pow )
|
|
||||||
|
|
||||||
if( IsNan() || pow.IsNan() )
|
if( IsNan() || pow.IsNan() )
|
||||||
return CheckCarry(1);
|
return CheckCarry(1);
|
||||||
|
|
||||||
|
@ -1701,7 +1762,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
power this = this ^ pow
|
power this = this ^ pow
|
||||||
pow can be negative and with fraction
|
pow can be negative and with fraction
|
||||||
|
@ -1713,8 +1773,6 @@ public:
|
||||||
*/
|
*/
|
||||||
uint Pow(const Big<exp, man> & pow)
|
uint Pow(const Big<exp, man> & pow)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( pow )
|
|
||||||
|
|
||||||
if( IsNan() || pow.IsNan() )
|
if( IsNan() || pow.IsNan() )
|
||||||
return CheckCarry(1);
|
return CheckCarry(1);
|
||||||
|
|
||||||
|
@ -2055,8 +2113,6 @@ public:
|
||||||
*/
|
*/
|
||||||
uint Ln(const Big<exp,man> & x)
|
uint Ln(const Big<exp,man> & x)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( x )
|
|
||||||
|
|
||||||
if( x.IsNan() )
|
if( x.IsNan() )
|
||||||
return CheckCarry(1);
|
return CheckCarry(1);
|
||||||
|
|
||||||
|
@ -2066,18 +2122,18 @@ public:
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Big<exp,man> exponent_temp;
|
||||||
|
exponent_temp.FromInt( x.exponent );
|
||||||
|
|
||||||
// m will be the value of the mantissa in range <1,2)
|
// m will be the value of the mantissa in range <1,2)
|
||||||
Big<exp,man> m(x);
|
Big<exp,man> m(x);
|
||||||
m.exponent = -sint(man*TTMATH_BITS_PER_UINT - 1);
|
m.exponent = -sint(man*TTMATH_BITS_PER_UINT - 1);
|
||||||
|
|
||||||
LnSurrounding1(m);
|
|
||||||
|
|
||||||
Big<exp,man> exponent_temp;
|
|
||||||
exponent_temp.FromInt( x.exponent );
|
|
||||||
|
|
||||||
// we must add 'man*TTMATH_BITS_PER_UINT-1' because we've taken it from the mantissa
|
// we must add 'man*TTMATH_BITS_PER_UINT-1' because we've taken it from the mantissa
|
||||||
uint c = exponent_temp.Add(man*TTMATH_BITS_PER_UINT-1);
|
uint c = exponent_temp.Add(man*TTMATH_BITS_PER_UINT-1);
|
||||||
|
|
||||||
|
LnSurrounding1(m);
|
||||||
|
|
||||||
Big<exp,man> ln2;
|
Big<exp,man> ln2;
|
||||||
ln2.SetLn2();
|
ln2.SetLn2();
|
||||||
c += exponent_temp.Mul(ln2);
|
c += exponent_temp.Mul(ln2);
|
||||||
|
@ -2087,7 +2143,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Logarithm from 'x' with a 'base'
|
Logarithm from 'x' with a 'base'
|
||||||
|
|
||||||
|
@ -2102,9 +2157,6 @@ public:
|
||||||
*/
|
*/
|
||||||
uint Log(const Big<exp,man> & x, const Big<exp,man> & base)
|
uint Log(const Big<exp,man> & x, const Big<exp,man> & base)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( base )
|
|
||||||
TTMATH_REFERENCE_ASSERT( x )
|
|
||||||
|
|
||||||
if( x.IsNan() || base.IsNan() )
|
if( x.IsNan() || base.IsNan() )
|
||||||
return CheckCarry(1);
|
return CheckCarry(1);
|
||||||
|
|
||||||
|
@ -3513,19 +3565,19 @@ private:
|
||||||
if( conv.base<2 || conv.base>16 )
|
if( conv.base<2 || conv.base>16 )
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
// the speciality for base equal 2
|
// special method for base equal 2
|
||||||
if( conv.base == 2 )
|
if( conv.base == 2 )
|
||||||
return ToString_CreateNewMantissaAndExponent_Base2(new_man, new_exp);
|
return ToString_CreateNewMantissaAndExponent_Base2(new_man, new_exp);
|
||||||
|
|
||||||
// the speciality for base equal 4
|
// special method for base equal 4
|
||||||
if( conv.base == 4 )
|
if( conv.base == 4 )
|
||||||
return ToString_CreateNewMantissaAndExponent_BasePow2(new_man, new_exp, 2);
|
return ToString_CreateNewMantissaAndExponent_BasePow2(new_man, new_exp, 2);
|
||||||
|
|
||||||
// the speciality for base equal 8
|
// special method for base equal 8
|
||||||
if( conv.base == 8 )
|
if( conv.base == 8 )
|
||||||
return ToString_CreateNewMantissaAndExponent_BasePow2(new_man, new_exp, 3);
|
return ToString_CreateNewMantissaAndExponent_BasePow2(new_man, new_exp, 3);
|
||||||
|
|
||||||
// the speciality for base equal 16
|
// special method for base equal 16
|
||||||
if( conv.base == 16 )
|
if( conv.base == 16 )
|
||||||
return ToString_CreateNewMantissaAndExponent_BasePow2(new_man, new_exp, 4);
|
return ToString_CreateNewMantissaAndExponent_BasePow2(new_man, new_exp, 4);
|
||||||
|
|
||||||
|
|
|
@ -975,12 +975,14 @@ public:
|
||||||
the first version of the multiplication algorithm
|
the first version of the multiplication algorithm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
multiplication: this = this * ss2
|
multiplication: this = this * ss2
|
||||||
|
|
||||||
it returns carry if it has been
|
it returns carry if it has been
|
||||||
*/
|
*/
|
||||||
uint Mul1(const UInt<value_size> & ss2)
|
uint Mul1Ref(const UInt<value_size> & ss2)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( ss2 )
|
TTMATH_REFERENCE_ASSERT( ss2 )
|
||||||
|
|
||||||
|
@ -1008,6 +1010,26 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
multiplication: this = this * ss2
|
||||||
|
can return carry
|
||||||
|
*/
|
||||||
|
uint Mul1(const UInt<value_size> & ss2)
|
||||||
|
{
|
||||||
|
if( this == &ss2 )
|
||||||
|
{
|
||||||
|
UInt<value_size> copy_ss2(ss2);
|
||||||
|
return Mul1Ref(copy_ss2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Mul1Ref(ss2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
multiplication: result = this * ss2
|
multiplication: result = this * ss2
|
||||||
|
@ -1688,10 +1710,33 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the first division algorithm
|
||||||
|
radix 2
|
||||||
|
*/
|
||||||
|
uint Div1(const UInt<value_size> & divisor, UInt<value_size> & remainder)
|
||||||
|
{
|
||||||
|
return Div1(divisor, &remainder);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
uint Div1_Calculate(const UInt<value_size> & divisor, UInt<value_size> & rest)
|
uint Div1_Calculate(const UInt<value_size> & divisor, UInt<value_size> & rest)
|
||||||
|
{
|
||||||
|
if( this == &divisor )
|
||||||
|
{
|
||||||
|
UInt<value_size> divisor_copy(divisor);
|
||||||
|
return Div1_CalculateRef(divisor_copy, rest);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Div1_CalculateRef(divisor, rest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint Div1_CalculateRef(const UInt<value_size> & divisor, UInt<value_size> & rest)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( divisor )
|
TTMATH_REFERENCE_ASSERT( divisor )
|
||||||
|
|
||||||
|
@ -1749,7 +1794,6 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
the second division algorithm
|
the second division algorithm
|
||||||
|
|
||||||
|
@ -1759,8 +1803,42 @@ public:
|
||||||
*/
|
*/
|
||||||
uint Div2(const UInt<value_size> & divisor, UInt<value_size> * remainder = 0)
|
uint Div2(const UInt<value_size> & divisor, UInt<value_size> * remainder = 0)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( divisor )
|
if( this == &divisor )
|
||||||
|
{
|
||||||
|
UInt<value_size> divisor_copy(divisor);
|
||||||
|
return Div2Ref(divisor_copy, remainder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Div2Ref(divisor, remainder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the second division algorithm
|
||||||
|
|
||||||
|
return values:
|
||||||
|
0 - ok
|
||||||
|
1 - division by zero
|
||||||
|
*/
|
||||||
|
uint Div2(const UInt<value_size> & divisor, UInt<value_size> & remainder)
|
||||||
|
{
|
||||||
|
return Div2(divisor, &remainder);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the second division algorithm
|
||||||
|
|
||||||
|
return values:
|
||||||
|
0 - ok
|
||||||
|
1 - division by zero
|
||||||
|
*/
|
||||||
|
uint Div2Ref(const UInt<value_size> & divisor, UInt<value_size> * remainder = 0)
|
||||||
|
{
|
||||||
uint bits_diff;
|
uint bits_diff;
|
||||||
uint status = Div2_Calculate(divisor, remainder, bits_diff);
|
uint status = Div2_Calculate(divisor, remainder, bits_diff);
|
||||||
if( status < 2 )
|
if( status < 2 )
|
||||||
|
@ -1786,14 +1864,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint Div2(const UInt<value_size> & divisor, UInt<value_size> & remainder)
|
|
||||||
{
|
|
||||||
return Div2(divisor, &remainder);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
return values:
|
return values:
|
||||||
0 - we've calculated the division
|
0 - we've calculated the division
|
||||||
|
@ -1974,6 +2044,34 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the third division algorithm
|
||||||
|
*/
|
||||||
|
uint Div3(const UInt<value_size> & ss2, UInt<value_size> * remainder = 0)
|
||||||
|
{
|
||||||
|
if( this == &ss2 )
|
||||||
|
{
|
||||||
|
UInt<value_size> copy_ss2(ss2);
|
||||||
|
return Div3Ref(copy_ss2, remainder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Div3Ref(ss2, remainder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
the third division algorithm
|
||||||
|
*/
|
||||||
|
uint Div3(const UInt<value_size> & ss2, UInt<value_size> & remainder)
|
||||||
|
{
|
||||||
|
return Div3(ss2, &remainder);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
the third division algorithm
|
the third division algorithm
|
||||||
|
|
||||||
|
@ -1982,10 +2080,8 @@ public:
|
||||||
Donald E. Knuth
|
Donald E. Knuth
|
||||||
!! give the description here (from the book)
|
!! give the description here (from the book)
|
||||||
*/
|
*/
|
||||||
uint Div3(const UInt<value_size> & v, UInt<value_size> * remainder = 0)
|
uint Div3Ref(const UInt<value_size> & v, UInt<value_size> * remainder = 0)
|
||||||
{
|
{
|
||||||
TTMATH_REFERENCE_ASSERT( v )
|
|
||||||
|
|
||||||
uint m,n, test;
|
uint m,n, test;
|
||||||
|
|
||||||
test = Div_StandardTest(v, m, n, remainder);
|
test = Div_StandardTest(v, m, n, remainder);
|
||||||
|
|
Loading…
Reference in New Issue