偶然发现了一个检测浮点数是否是NaN的做法:如果f == f返回false,就表示f是NaN。对于float和double都管用。
在有些设备上只有float没有double,比如前几代GPU、部分移动设备等。当非得用到double精度的时候该怎么办?
我记得去年在某个地方见到过用2个float模拟double的作法,经过一番玩命地搜索,得来全不费功夫,就在CUDA SDK的Mandelbrot例子里找到了2个float模拟double乘法的函数。甚至,GTX280上的double也是类似的方法模拟出来的,所以慢的惊人,只有float八分之一的速度。(EDIT: Mandelbrot在GTX480上,float和double都可以到60-70 fps,模拟的话只有20-30 fps,Fermi的double速度上去了)
先show一下模拟乘法的函数dsmul:
// This function multiplies DS numbers A and B to yield the DS product C.
__device__ inline void dsmu ...