C/C++ INF:infinite

最后更新于:2020-07-30 19:59:38

一.INF:infinite错误简介

INF:infinite,表示“无穷大。

在数据处理输入输出时,极有可能遇到数据读入空值,例如:运算中分母为00.0;对负数取平方根等操作,这将产生NaNinf

二.INF:infinite的产生原因

INF:infinite,表示“无穷大”,产生NaN的原因有以下几种:

1.对0求对数,如:log(0) = inf;

2.分母为0,如:\frac {1.0}{0.0} = inf;

3.分母为0,如:\frac {-1.0}{0.0} = -inf;

4.inf参与计算,如 : 0.0+inf=inf;

三.检测INF:infinite错误

下面几个宏即包含在math.h头文件,可用于判断一个表达式的结果是否为infnan或其他。使用时包括include<math.h>

#include<math.h>

int isfinite(x);//判断x是否有限,是返回1,其它返回0;
int isnormal(x);//判断x是否为一个数(非inf或nan),是返回1,其它返回0;
int isnan(x);//当x时nan返回1,其它返回0;
int isinf(x);//当x是正无穷是返回1,当x是负无穷时返回-1,其它返回0。有些编译器不区分。

四.输出INF:infinite演示

产生naninf的操作,使用库函数(宏)判断,请看下面的例子:

/************************************************************************/
/*@文件名      : INF:infinite.cpp
/*@日  期      : 2020/7/17 19:37
/*@作  者      : 猿说编程
/*@公众号      : 猿说编程
/*@博客        : www.shuopython.com
/*@描述        : INF:infinite - C/C++教程
/************************************************************************/

#include <iostream>
#include <math.h>
using namespace std;

int main(int argc, char *argv[])
{
    //nan
    cout << "nan: " << sqrt(-1) << endl;
    cout << "nan: " << log(-1.0) << endl;
    //cout << "nan: " << 0.0 / 0.0 << endl;
    cout << "nan: " << 0.0*sqrt(-1) << endl;
    cout << "nan: " << sqrt(-1) / sqrt(-1) << endl;
    cout << "nan: " << sqrt(-1) - sqrt(-1) << endl;

    //inf
    //cout << "inf: " << 1 / 0.0 << endl;
    //cout << "-inf: " << -1 / 0.0 << endl;
    //cout << "inf: " << 0.0 + 1 / 0.0 << endl;
    cout << "-inf: " << log(0) << endl;

    //cout << "isfinite: 0" << isfinite(0.0 / 0.0) << endl;
    //cout << "isfinite: 0" << isfinite(1 / 0.0) << endl;
    cout << "isfinite: 1" << isfinite(1.1) << endl;

    //cout << "isnormal: 0" << isnormal(0.0 / 0.0) << endl;
    //cout << "isnormal: 0" << isnormal(1 / 0.0) << endl;
    cout << "isnormal: 1" << isnormal(1.1) << endl;

    //cout << "isnan: 1" << isnan(0.0 / 0.0) << endl;
    //cout << "isnan: 0" << isnan(1 / 0.0) << endl;
    cout << "isnan: 0" << isnan(1.1) << endl;

    //cout << "isinf: 0" << isinf(0.0 / 0.0) << endl;
    //cout << "isinf: 1" << isinf(1 / 0.0) << endl;
    cout << "isinf: 0" << isinf(1.1) << endl;


    return 0;
}


/*
输出:
nan: -nan(ind)
nan: -nan(ind)
nan: -nan(ind)
nan: -nan(ind)
nan: -nan(ind)
-inf: -inf
isfinite: 11
isnormal: 11
isnan: 00
isinf: 00

*/


猜你喜欢

1. 三目运算符

2. 逗号表达式

3. wprintf输出中文乱码

4. sizeof和strlen函数区别

5. unicode和多字节区别




转载请注明: 猿说编程 » C/C++教程 » NaN(Not a Number)



技术交流、商务合作请直接联系博主
扫码或搜索:猿说编程

python/C++教程

猿说编程
微信公众号 扫一扫关注