replaced the tests for NAN and INF with a single test if the binary exponent is 0xFF, as this indicates both
patch for print.cpp
// check IEEE754 bit layout to understand code below.
// note the exponent is a power of 2
byte getExponentByte(float number)
{
uint8_t e = (*(((byte*) &number)+3) & 0x7F) << 1;
if (*(((byte*) &number)+2) & 0x80) e++;
return e;
}
size_t Print::printFloat(double number, uint8_t digits, uint8_t notation)
{
size_t n = 0;
int exponent = 0;
byte e = getExponentByte(number);
// Recognize NAN and INF in single test
if (e == 0xFF)
{
if (isnan(number))
{
n += print("nan");
return n;
}
// if not NAN => INF
if (number < 0.0) n += write('-');
n += print("inf");
return n;
}
// handle negative values
if (number < 0.0)
{
n += write('-');
number = -number;
}
....
the time dropped from 720 to 704 gain ~2%,
I need to check the timer code in the test program, as the step size becomes relative too big.