原文轉自http://blog.csdn.net/c395565746c/article/details/6086966
float acos(float x)
參數x的范圍為-1.0f到1.0f之間,返回值范圍在0.0f到3.141592653f之間,值得注意的是:當x超出[-1.0f, 1.0f]這個范圍時此函數將返回一個-1.#IND000值,代表無窮小而編譯器會不給出任何提示,通常此將會導致程序錯誤或崩潰,所以以后要注意數學函數的參數范圍了.
可以通過以下代碼進行調試:
float test = acos(1.0001f)
if (test != test)
{
cout << "錯誤出現" << endl;
}
昨天遇到的-1.#IND000,問余衍炳師兄,告訴我這是無窮小。但是我想用if(a==-1.#IND000)去判斷,編譯不過,呵呵。
現在找到方法了 ,不過方法有點怪,astone指出,b!=b應該是恆為false,但在這個情況下竟然是true
float a=10;
float b=a/0;
if( b > 0.0f ||b != b)
printf("%f",b);
這個可以判斷1.#INF000
float a=-10;
float b=a/0;
if( b < 0.0f ||b != b)
printf("%f",b);
這個可以判斷-1.#IND000
加b!=b只用於.net 2003,在vC++6.0下不用。
使用類似於pow, exp等等函數時常會產生一個無效數字1.#IND00,在VC下可以通過與一個確定數字比較大小來判斷是否產生了無效數字,但這個方法在DEV-CPP下卻是行不通的。
其實解決辦法很簡單,使用 float.h中一個函數_isnan即可:
int _isnan(double x);
當x是一個無效值(NaN, Not a Number) 時,返回非零值
否則返回0.
一般可能是除數為零,使用數組時也經常出現這種情況