浮點數越界或者無效-1.#IND0


原文轉自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)去判斷,編譯不過,呵呵。

現在找到方法了浮點數越界或者無效-1.#IND000   ,不過方法有點怪,astone指出,b!=b應該是恆為false,但在這個情況下竟然是true浮點數越界或者無效-1.#IND000

 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.

一般可能是除數為零,使用數組時也經常出現這種情況


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM