digitalmars.D.learn - precision test results
- Saaa (32/32) Jul 26 2009 Maybe interesting for other people
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?
Jul 26 2009