There are differences in the way ATI and Nvidia design their hardware. One complaint from software developers has been that there is too much variation in the capabilities of hardware designs, which everyone can see in games that have multiple code paths and thus display different results on different hardware. In particular, if a game detects old hardware, it will run specialized software "channels" of code to accommodate that system.
Console software developers do not need to deal with this, as the constructs for the graphics subsystem are set in stone, but PC game developers don't have this luxury. If they have new ideas and techniques they would like to utilize in their games, they have to build them hoping that people will notice and want to play their games with all of the wonderful features enabled. But we all know that the majority of gamers does not play titles with all of the bells and whistles turned on.
To make matters worse, DirectX 9 left some parts of the standard a bit too open for interpretation, and some parts of the standard were changed before things could be instituted into designs by ATI and Nvidia. This made for some confusion on the part of developers, as there were differing precision standards between the competing hardware makers. Hardware manufacturers have to educate developers on the strengths and capabilities of their hardware, and conflicting standards slows down bringing quality content to the market.
Direct3D 10 addresses the standards for required feature sets, resource limits, arithmetic precision and various storage formats. While everything inside Direct3D 10 hardware will be 32-bit (floating point or integer), there are several storage types. Below is a list of the data storage formats.
In the list you will see full single-precision formats, as well as half-precision formats such as unorm and snorm16. float16 has been used for things such as High Dynamic Range (HDR), but has the drawback of utilizing too much storage and bandwidth. Other alternative formats such as 11-11-10 were also created. This is the combination of two float11 and one float10 units (11 on red, 11 on green, and 10 on blue) for 32 bits in conjunction with a shared-exponent format (RGBE). Click here for more information on floating point precision and formats inside the IEEE 754 standard.