我今天痛苦地得知南和inf有嚴重的側面問題。你知道嗎?例如sqrtf(NaN)大於慢15倍和sqrtf(-1)是慢30倍(!!)比sqrtf(10.123132) - 這本身就是一個很慢的浮動點計算!?你計算垃圾,需要花費大量的時間,甚至沒有意識到。Catch Nan和Inf在Windows C++
#include <fenv.h>
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
你怎麼能做到這一點在Windows下:
好,在Linux下,你可以通過拋出一個異常發生時,他們抓住楠和INF錯誤?
編輯: 標杆代碼:
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
你是如何衡量那個時間的?也許而不是隱藏異常,你應該防止發生? – 2013-02-20 21:49:59
使用'isinf()'和'isnan()'檢查值? http://msdn.microsoft.com/en-us/library/hh308344.aspx – 2013-02-20 21:50:07
使用_controlfp()開啓異常 – 2013-02-20 21:51:17