今日、 NanとInfには深刻な副次的な問題があることを痛感しました。たとえば、sqrtf(NaN)はsqrtf(10.123132)よりも15倍以上遅く、sqrtf(-1)は30倍遅い(!!)ことをご存知ですか?これ自体は非常に遅い浮動小数点計算です!?あなたはゴミを計算し、それのためにばかげた時間を必要とし、それを実現することさえしません。
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