When choosing the data type for an ascii grid the driver doesn't care about the no data value which can lead to very wrong results.
Short example:
The grid
ncols 2
nrows 2
xllcorner 500000.00
yllcorner 6100000.00
cellsize 1
nodata_value -999999
39 13
-999999 22
returns the following statistics from gdalinfo -stats:
Band 1 Block=2x1 Type=Int16, ColorInterp=Undefined
Minimum=-32145.000, Maximum=39.000, Mean=-12263.000, StdDev=13410.683
NoData Value=-999999
Metadata:
STATISTICS_MINIMUM=-32145
STATISTICS_MAXIMUM=39
STATISTICS_MEAN=-12263
I think it should be possible to use a nodatavalue which is well outside the domain of the data values. So, in the above case the driver should choose GDT_Float32 from looking at the nodatavalue alone. This would have the nice side effect, that it makes the complete file scan unnecessary in cases like this.