今天我痛苦地发现NaN和Inf存在严重的副作用。例如,您是否知道sqrtf(NaN)比sqrtf(10.123132)慢15倍以上,而sqrtf(-1)则慢30倍以上!?您计算出的垃圾需要荒谬的时间,而您甚至没有意识到它。
你在Windows系统下如何实现这个呢?
编辑: 基准测试代码:
好吧,在Linux下,您可以通过在其发生时抛出异常来捕获NaN和Inf错误:
#include <fenv.h>
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
你在Windows系统下如何实现这个呢?
编辑: 基准测试代码:
float a,b;
a = 1.0 / 0; //inf
a = -10; //also nice
long c=0;
long time = SDL_GetTicks();
for (long i=1;i<=1000000;i++) {
b=sqrt(a);
}
ostringstream Help; Help << SDL_GetTicks()-time;
//RESULT SHEET
//sqrt(1): 21ms
//sqrt(10): 21ms
//sqrt(10.123): 20ms
//sqrt(-10); 390ms
//sqrt(+-NaN): 174ms
//sqrt(inf): 174
isinf()
和isnan()
来检查数值?http://msdn.microsoft.com/en-us/library/hh308344.aspx - Violet Giraffe