removed: from parser: SetSmallToZero(bool zero)
this was actually a bad feature git-svn-id: svn://ttmath.org/publicrep/ttmath/trunk@277 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
e727eacce0
commit
32b8c7a957
|
@ -472,16 +472,6 @@ int param_sep;
|
||||||
bool calculated;
|
bool calculated;
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
small values will be set to zero
|
|
||||||
small value means:
|
|
||||||
- if the mantissa of the value consists only of one, two or three set bits
|
|
||||||
- and these bits are next to each other
|
|
||||||
- and the exponent is smaller than about 2 times the number of bits from the mantissa
|
|
||||||
default: true
|
|
||||||
*/
|
|
||||||
bool small_to_zero;
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
we're using this method for reporting an error
|
we're using this method for reporting an error
|
||||||
|
@ -1756,45 +1746,6 @@ return is_it_name_of_function;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
small values will be set to zero
|
|
||||||
small value means:
|
|
||||||
- if the mantissa of the value consists only of one, two or three set bits
|
|
||||||
- and these bits are next to each other
|
|
||||||
- and the exponent is smaller than about 2 times the number of bits from the mantissa
|
|
||||||
*/
|
|
||||||
void SmallToZero(ValueType & value)
|
|
||||||
{
|
|
||||||
if( value.IsNan() || value.IsZero() )
|
|
||||||
return;
|
|
||||||
|
|
||||||
int man_size = int(value.mantissa.Size() * TTMATH_BITS_PER_UINT);
|
|
||||||
int epsilon = man_size / 10;
|
|
||||||
|
|
||||||
if( value.exponent >= -(2*man_size - epsilon) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
uint id, bit;
|
|
||||||
uint highest, lowest;
|
|
||||||
|
|
||||||
value.mantissa.FindLeadingBit(id, bit);
|
|
||||||
highest = id * TTMATH_BITS_PER_UINT + bit;
|
|
||||||
|
|
||||||
value.mantissa.FindLowestBit(id, bit);
|
|
||||||
lowest = id * TTMATH_BITS_PER_UINT + bit;
|
|
||||||
|
|
||||||
if( highest < lowest )
|
|
||||||
// oops, something wrong
|
|
||||||
return;
|
|
||||||
|
|
||||||
uint bits = highest-lowest + 1;
|
|
||||||
|
|
||||||
// max two set bits (these bits are next to each other)
|
|
||||||
// maybe in the future this can be changed to 3 or more
|
|
||||||
// may this should be depended from value.mantissa.Size() ?
|
|
||||||
if( bits <= 3 )
|
|
||||||
value.SetZero();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -1951,8 +1902,6 @@ int character;
|
||||||
result.sign = false;
|
result.sign = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( small_to_zero )
|
|
||||||
SmallToZero(result.value);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2190,9 +2139,6 @@ uint res;
|
||||||
*/
|
*/
|
||||||
Error( err_internal_error );
|
Error( err_internal_error );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( small_to_zero )
|
|
||||||
SmallToZero(value1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2383,9 +2329,6 @@ int index;
|
||||||
// the result of a function will be on 'stack[index-1]'
|
// the result of a function will be on 'stack[index-1]'
|
||||||
// and then at the end we'll set the correct type (numerical value) of this element
|
// and then at the end we'll set the correct type (numerical value) of this element
|
||||||
CallFunction(stack[index-1].function_name, amount_of_parameters, index);
|
CallFunction(stack[index-1].function_name, amount_of_parameters, index);
|
||||||
|
|
||||||
if( small_to_zero )
|
|
||||||
SmallToZero(stack[index-1].value);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2589,7 +2532,6 @@ Parser(): default_stack_size(100)
|
||||||
comma = '.';
|
comma = '.';
|
||||||
comma2 = ',';
|
comma2 = ',';
|
||||||
param_sep = 0;
|
param_sep = 0;
|
||||||
small_to_zero = true;
|
|
||||||
|
|
||||||
CreateFunctionsTable();
|
CreateFunctionsTable();
|
||||||
CreateVariablesTable();
|
CreateVariablesTable();
|
||||||
|
@ -2613,7 +2555,6 @@ Parser<ValueType> & operator=(const Parser<ValueType> & p)
|
||||||
comma = p.comma;
|
comma = p.comma;
|
||||||
comma2 = p.comma2;
|
comma2 = p.comma2;
|
||||||
param_sep = p.param_sep;
|
param_sep = p.param_sep;
|
||||||
small_to_zero = p.small_to_zero;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
we don't have to call 'CreateFunctionsTable()' etc.
|
we don't have to call 'CreateFunctionsTable()' etc.
|
||||||
|
@ -2803,23 +2744,6 @@ bool Calculated()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
small values will be set to zero
|
|
||||||
(all values, variables, functions and results from calculating are checked)
|
|
||||||
|
|
||||||
small value means:
|
|
||||||
- if the mantissa of the value consists only of one, two or three set bits
|
|
||||||
- and these bits are next to each other
|
|
||||||
- and the exponent is smaller than about 2 times the number of bits from the mantissa
|
|
||||||
default: true
|
|
||||||
*/
|
|
||||||
void SetSmallToZero(bool zero)
|
|
||||||
{
|
|
||||||
small_to_zero = zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue