首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在双变量中检查inf (和|或) NaN

如何在双变量中检查inf (和|或) NaN
EN

Stack Overflow用户
提问于 2010-11-04 17:35:39
回答 3查看 52.1K关注 0票数 33

考虑以下代码:

代码语言:javascript
复制
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

template<class T>
bool IsNaN(T t)
{
    return t != t;
}

int main(int argc, char**argv)
{
    double d1, d2;
    sscanf(argv[1], "%f", &d1);
    sscanf(argv[2], "%f", &d2);

    double dRes = d1/d2;

    cout << "dRes = " << dRes << "\n";

    if(IsNaN(dRes))
        cout << "Is NaN\n";
    else
        cout << "Not NaN\n";

}

几个问题:

  1. 当我传递0和0作为参数时,它输出dRes = inf。但是我期望的是dRes = NaN,或者类似的东西,

  1. ,NaN可以用双变量表示吗?当我将d1,d2,dRes的数据类型改为

,并传递0和0时,我得到了一个Floating exception。检查变量的值是否等于inf的difference?

  • How是多少
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-04 17:44:30

在使用scanf() double时,应使用%lf而不是%f读取

  1. %f会将输入转换为32位float,因此变量的前32位将被一些无效数据填充,而后32位将成为垃圾。
  2. 是。#include <limits>then std::numeric_limits::quiet_NaN().一些编译器(如gcc)还为整数类型提供了NAN macro in .
  3. There is no NaN或infinity。整数除以零将导致an exception (SIGFPE).
  4. #include <cmath>,,然后是std::isinf(x)。使用std::isfinite(x)确保x不是NaN或Infinity。
票数 42
EN

Stack Overflow用户

发布于 2018-01-15 03:31:34

函数fpclassify允许您检查所有特殊情况下的浮点值。

它在<math.h>中作为一个宏出现在C99中,在<cmath>中作为一个函数族,在floatdoublelong double中使用std::fpclassify这个重载名称,从C++11开始。

has首选项具有a nice example

票数 0
EN

Stack Overflow用户

发布于 2018-01-15 03:07:04

就像这样做:

代码语言:javascript
复制
if (dRes  == +1.0/0.0 || dRes  == -1.0/0.0) ... //+INF, -INF
if (dRes  == +0.0/0.0 ) ... //+NaN; i.e. pow(2.0 ,16384.0)
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4095337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档