precision test results
Saaa
empty at needmail.com
Sun Jul 26 09:39:17 PDT 2009
Maybe interesting for other people
Abstract:
%.8e format holds full precision information for floats
making it a good %a contender
float have max 24bit precision
2^-24 = 0.000000059604644775390625
2^-23 = 0.00000011920928955078125
to distinguish between these two you only need a precision of 8.
Stupid test:
//slightly arbitrarily chosen starting points
float[8] fr = [ 0f, 0.0001f, 0.1f, 0.5f, 1f, 10f, 100_000f,
1_000_000_000_000_000f ];
for(int ii=0;ii<fr.length;ii++)
{
float f=fr[ii];
writefln("%.100g",f);
//loop over all possibilities
for (long i=0; i<pow(cast(real)2,24); i++)
{
string s = format("%.8e",f);
if(i%1_000_000 == 0)writefln(i,` `,s);
float f2 = to!(float)(s);
if(f != f2) {writefln(`!!!`, i,` `,s," %a %.100g",f,f); return;}
f=nextUp(f);
}
}
return;
result:
No exclamation marks in the output.
Thus format "%.8e" seems to hold full precision information
This format is only one char longer than %a format,
btw is there a float hex string to float converter?
More information about the Digitalmars-d-learn
mailing list