zoukankan      html  css  js  c++  java
  • 浮点数越界或者无效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.

    一般可能是除数为零,使用数组时也经常出现这种情况

  • 相关阅读:
    JavaScript词法结构
    【python】类变量、实例变量
    把pandas dataframe转为list方法
    list 删除一个元素的三种做法--python
    Web.config中rewite 节点引起的500.19错误
    extjs让按钮可用或者不可用
    VS2010启动奔溃
    迟来的年终总结
    Nginx配置多个server
    RestSharp的简单用法
  • 原文地址:https://www.cnblogs.com/mlv5/p/2498828.html
Copyright © 2011-2022 走看看