Fixed #4068 (Endless loop inside MathLib::add())
This commit is contained in:
parent
f133c9e8ec
commit
d24badbfda
|
@ -201,9 +201,11 @@ std::string MathLib::add(const std::string & first, const std::string & second)
|
||||||
|
|
||||||
double d1 = toDoubleNumber(first);
|
double d1 = toDoubleNumber(first);
|
||||||
double d2 = toDoubleNumber(second);
|
double d2 = toDoubleNumber(second);
|
||||||
while (d1 > 100000.0 * d2 && toString<double>(d1+d2)==first)
|
|
||||||
|
int count = 0;
|
||||||
|
while (d1 > 100000.0 * d2 && toString<double>(d1+d2)==first && ++count<5)
|
||||||
d2 *= 10.0;
|
d2 *= 10.0;
|
||||||
while (d2 > 100000.0 * d1 && toString<double>(d1+d2)==second)
|
while (d2 > 100000.0 * d1 && toString<double>(d1+d2)==second && ++count<5)
|
||||||
d1 *= 10.0;
|
d1 *= 10.0;
|
||||||
|
|
||||||
return toString<double>(d1 + d2);
|
return toString<double>(d1 + d2);
|
||||||
|
@ -217,9 +219,11 @@ std::string MathLib::subtract(const std::string &first, const std::string &secon
|
||||||
|
|
||||||
double d1 = toDoubleNumber(first);
|
double d1 = toDoubleNumber(first);
|
||||||
double d2 = toDoubleNumber(second);
|
double d2 = toDoubleNumber(second);
|
||||||
while (d1 > 100000.0 * d2 && toString<double>(d1-d2)==first)
|
|
||||||
|
int count = 0;
|
||||||
|
while (d1 > 100000.0 * d2 && toString<double>(d1-d2)==first && ++count<5)
|
||||||
d2 *= 10.0;
|
d2 *= 10.0;
|
||||||
while (d2 > 100000.0 * d1 && toString<double>(d1-d2)==second)
|
while (d2 > 100000.0 * d1 && toString<double>(d1-d2)==second && ++count<5)
|
||||||
d1 *= 10.0;
|
d1 *= 10.0;
|
||||||
|
|
||||||
return toString<double>(d1 - d2);
|
return toString<double>(d1 - d2);
|
||||||
|
|
|
@ -88,6 +88,7 @@ private:
|
||||||
ASSERT_EQUALS("1" , MathLib::add("1", "0"));
|
ASSERT_EQUALS("1" , MathLib::add("1", "0"));
|
||||||
ASSERT_EQUALS("0" , MathLib::add("0", "0."));
|
ASSERT_EQUALS("0" , MathLib::add("0", "0."));
|
||||||
ASSERT_EQUALS("1.0000001" , MathLib::add("1", "0.00000001")); // #4016
|
ASSERT_EQUALS("1.0000001" , MathLib::add("1", "0.00000001")); // #4016
|
||||||
|
ASSERT_EQUALS("30666.22" , MathLib::add("30666.22", "0.0")); // #4068
|
||||||
|
|
||||||
// subtraction
|
// subtraction
|
||||||
ASSERT_EQUALS("254", MathLib::subtract("0xff", "1"));
|
ASSERT_EQUALS("254", MathLib::subtract("0xff", "1"));
|
||||||
|
@ -98,6 +99,7 @@ private:
|
||||||
ASSERT_EQUALS("1" , MathLib::subtract("1", "0"));
|
ASSERT_EQUALS("1" , MathLib::subtract("1", "0"));
|
||||||
ASSERT_EQUALS("0" , MathLib::subtract("0", "0."));
|
ASSERT_EQUALS("0" , MathLib::subtract("0", "0."));
|
||||||
ASSERT_EQUALS("0.99999999" , MathLib::subtract("1", "0.00000001")); // #4016
|
ASSERT_EQUALS("0.99999999" , MathLib::subtract("1", "0.00000001")); // #4016
|
||||||
|
ASSERT_EQUALS("30666.22" , MathLib::subtract("30666.22", "0.0")); // #4068
|
||||||
|
|
||||||
// multiply
|
// multiply
|
||||||
ASSERT_EQUALS("-0.003" , MathLib::multiply("-1e-3", "3"));
|
ASSERT_EQUALS("-0.003" , MathLib::multiply("-1e-3", "3"));
|
||||||
|
|
Loading…
Reference in New Issue