double normalize(double d, int& exp) { if(IsNull(d) || d == 0) { exp = Null; return d; } bool sign = (d < 0); if(sign) d = -d; exp = minmax<int>(ilog10(d), -308, +308); // 8-byte double! d /= ipow10(exp); if(d >= 10) { d /= 10; exp++; } if(d < 1) { d *= 10; exp--; } return sign ? -d : d; }
Report message to a moderator