c++ - nan() 函数的参数
问题描述
有时需要获取NaN
值(例如,从函数中将其作为错误值返回)。С++11 提供了查看文档double nan(const char* tagp);
的功能。此函数获取 C 字符串参数,其中:NaN
tagp
库实现可以使用它以特定于实现的方式区分不同的 NaN 值。如果这是一个空字符串 (""),该函数返回一个通用的 NaN 值
我想更深入地了解这个功能。有人可以更详细地解释
tagp
除了空字符串“”之外,还可以使用哪些值?我在哪里可以找到可能值的列表?- 如果传递的
tagp
参数错误或编译器不支持会发生什么? - 在跨平台代码中使用这个特定于实现的函数是否安全?
解决方案
С++11 提供
double nan(const char* tagp);
一些 C 章节和经文(C17 § 7.12.11.2)
说明
2nan
,nanf
, 和函数根据以下规则nanl
转换 指向的字符串。tagp
callnan("n-char-sequence")
就相当于strtod("NAN(n-char-sequence)", (char**)NULL);
callnan("")
就相当于strtod("NAN()"
,(char**)NULL)
。如果tagp
不指向 n 字符序列或空字符串,则调用等效于strtod("NAN",(char**)NULL)
. ...返回
3nan
如果可用,函数返回一个安静的 NaN,其内容通过 指示tagp
。如果实现不支持 quietNaNs
,则函数返回零。
- 除了空字符串“”之外,还可以使用哪些 tagp 值?我在哪里可以找到可能值的列表?
tagp
指向 0-9、AZ、az、_ 字符的序列。
- 如果
tagp
编译器不支持传递的参数会怎样?
如果 C/C++ 规范不支持,“调用等效于strtod("NAN",(char**)NULL)
”。这导致实现定义的结果。
- 在跨平台代码中使用这个特定于实现的函数是否安全?
是的,在这种未定义的行为中是安全的,这是不期望的。然而,派生的含义和 NAN 是特定于实现的。
将n-char-sequence解释为 NAN 有效负载的十进制表示是一种可能的结果,但受到上述限制。
另请参阅浮点 NaN 有效负载有什么用途?和维基NaN
推荐阅读
- chart.js - ChartJs - 角度线和刻度线'在顶部'
- c++ - 将 macOS 控制台应用程序添加到辅助功能
- django - 单元测试 Django REST 框架的 PUT 方法
- amazon-dynamodb - 如何使用非主键从 DynamoDB 中获取多行
- python - AttributeError:'list' 对象没有属性'lower':聚类
- python - 为什么 python 显示“列表索引超出范围”错误?
- php - PHP CURL 错误 403
- lambda - GroupBy并合并到java中的单个列表中
- javascript - 如何在javascript中比较和更改对象值的数组
- javascript - 鼠标悬停时调整图像大小一直闪烁