1 I think Cg uses a half float (fp16) data type. Also while loading the fp16 texture data into the graphics card, I can save some PCI-Ex bus bandwidth when compared to loading a fp32 texture data. Bus bandwidth and data transfer time is very critical for my application. Also if I use fp16 texture instead of fp32 texture I save a ton of memory on the GPU which is scarce.
2 It depends whether you're meaning storage or processing as half-precision.
Storage, as Krohm mentioned, is dependent on some device caps but most recent hardware will be okay for vertex/texture elements in FP16 format.
Processing is much less clear - older hardware implemented SM2 in half/24/single precision depending on the architecture. Both SM3 and SM4 mandate that all internal calculations are performed with FP32 precision - so even if you read from and then write to FP16 storage using SM4 the intermediary computations are all done at FP32.
link:
1 http://www.gamedev.net/community/forums/topic.asp?topic_id=327971
2 http://www.gamedev.net/community/forums/topic.asp?topic_id=481660
(即节省内存和带宽,至于运行速度现已无差别)