private static int _Log10Abs(double value)
{
value = Math.Abs(value);
if (value < 1e-8 || value > 1e23)
{
return (int)Math.Floor(Math.Log10(value));
}
else
{
var values = _Log10AbsValues;
/* Do a binary search with 5 steps */
var result = 16;
if (value < values[result])
result -= 8;
else
result += 8;
if (value < values[result])
result -= 4;
else
result += 4;
if (value < values[result])
result -= 2;
else
result += 2;
if (value < values[result])
result -= 1;
else
result += 1;
if (value < values[result])
result -= 1;
result -= 8;
//
return result;
}
}