> If you can accept 1e–30 to 1e30 instead, going to eS = 4 does that.
I think that's totally reasonable for 32 bit. For 64 bit, I'd really like 1e50-1e60 (so that you can do Pythagorean theorem on numbers in the 1e25-1e30 range). One of the main reasons FP64 is so popular is it wastes a bit or two of precision to cover an absolutely humongous range. Having a format that is big enough to easily handle the biggest/smallest number anyone will throw at it is a really nice feature. FP32 has enough range that you don't run into problems until you start going to planetary scales, and FP64 is big enough to let you express universe sized scales in whatever units you feel like. It's not maximally efficient, but with 64 bits, it's better to tune for ease rather than efficiency.
> What I've seen in actual programs is that units are adjusted when
magnitudes become extreme. Astronomers switch to parsecs or light-years
or A.U.s. Electrical engineers express capacitance in nanofarads, not
farads. Chemists work with femtoseconds. Chemists also switch to
logarithms to deal with extreme magnitudes (like pH values). So the
actual codes input and output more human-friendly quantities closer to
zero in magnitude.
Some do, some don't (and those that do will often break their normalization accidentally. NGSpice internally uses meter/kilogram/seconds (
https://github.com/ngspice/ngspice/blob/032b1c32c4dbad45ff132bcfac1dbecadbd8abb0/src/spicelib/devices/hisimhv1/hsmhvset.c#L1390), Chemists will often represent their inputs as pH, and then take an exponential to get a concentration internally, etc. The important part is that once you aren't trying to squeeze real numbers into 16 bits (which is small enough to inherently force normalization), non expert programmers will try to do things in every way imaginable (and lots of ways that numerics people would never imagine because they're too weird). Especially in 64 bit land, the goal of a number format should be for the user to have to think about it as little as possible. FP64 (for all of IEEE 754's faults) does an excellence job of that, and trying to replace it with a new number format that requires users to think about normalization.
> I'm very interested in being proved wrong, with an actual production code. Please let me know.
I hope the ngspice link satisfies this, but I think production code is only half of the issue. A 64 bit real number format is the format that we expect intro CS students, undergrad physics students, hacked together research scripts and all other manner of people to use. I think such a limited exponent range would be fine if we were in the 1980s where computers were expensive and users were carefully trained, but in the modern world, the default number format will be used by 10s of millions of people, and 99% of them won't even know the name of the number format they're using.