我是靠谱客的博主 美丽豆芽,最近开发中收集的这篇文章主要介绍isnan函数返回值c语言,C++ std::isnan等函数的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C和C++11标准提供了类似于isnan、isfinite、isinf、isnormal、fpclassify分别用于判断是非数(NaN)值、有限制、无穷值、正常数值等。

今天在使用Modbus读取设备对应寄存器的float状态值时,出现一些问题,导致数据不能正常获取,最后发现原来设备对应的寄存器里面会出现一些无效的值,导致读取显示出错,没做容错判断处理。后面加上条件判断就可以了。

bool D02011C01::getState()

{

bool rc = false;

Modbus::RTU rtu;

// 获取工况参数(共12项)

Uint8Array req = rtu.req(deviceId(), 4, 1110, 24);

if (SendCmd(rtu, req, 3000, 3))

{

float xishu[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

for (int i = 0; i < 12; i++)

{

float val;

// 获取的val值可能不是有效的float类型,比如说:-1.#IND,需要对所获取的结果做有效性判断

if (rtu.get_value(val, 2 * i, false, false) && !std::isnan(val))

{

setStateData(i + 1, val);

rc = true;

}

}

}

return rc;

}

注意

对于float类型的值,C和C++11中都做了相应的处理,用于判断一个float值是否为无穷大、非数( NaN )值;

有多个拥有不同符号位和载荷的不同 NaN 值,参阅 std::nan 及 std::numeric_limits::quiet_NaN 。

NaN 值决不与自身或其他 NaN 值比较相等。 IEEE-754 不要求复制 NaN 保留其位表示(符号与载荷),尽管大多数实现保留。

另一种测试浮点值是否 NaN 的方式是与自身比较: bool is_nan(double x) { return x != x; }

示例如下:

#include

#include

#include

int main()

{

std::cout << std::boolalpha

<< "isnan(NaN) = " << std::isnan(NAN) << 'n'

<< "isnan(Inf) = " << std::isnan(INFINITY) << 'n'

<< "isnan(0.0) = " << std::isnan(0.0) << 'n'

<< "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN/2.0) << 'n'

<< "isnan(0.0 / 0.0) = " << std::isnan(0.0/0.0) << 'n'

<< "isnan(Inf - Inf) = " << std::isnan(INFINITY - INFINITY) << 'n';

}

输出:

isnan(NaN) = true

isnan(Inf) = false

isnan(0.0) = false

isnan(DBL_MIN/2.0) = false

isnan(0.0 / 0.0) = true

isnan(Inf - Inf) = true

有时候发现不少函数以前没怎么用过,遇到问题才发现又学到了一些知识。

C和C++11标准提供了类似于isnan、isfinite、isinf、isnormal、fpclassify分别用于判断是非数(NaN)值、有限制、无穷值、正常数值等。

isnan

NAN

Not-A-Number (constant )

isfinite

Is finite value (macro )

isinf

Is infinity (macro/function )

isnormal

Is normal (macro/function )

fpclassify

Classify floating-point value (macro/function )

本文同步分享在 博客“雪域迷影”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

最后

以上就是美丽豆芽为你收集整理的isnan函数返回值c语言,C++ std::isnan等函数的使用的全部内容,希望文章能够帮你解决isnan函数返回值c语言,C++ std::isnan等函数的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部