nan在C++中是什么意思?为什么pow(-4,-2.1)返回-nan
What does -nan mean in C++? Why does pow(-4, -2.1) return -nan?
在JavaScript中,当a
是负数而b
是非整数时,我理解为什么Math.pow(a, b)
是NaN。其他编程语言也是如此。
但是,C++呢?
而在JavaScript中Math.pow(-4, -2.1)
返回NaN
,在C++中pow (-4, -2.1)
返回-nan
。为什么?
示例:
#include <iostream>
#include <math.h>
using namespace std;
int main () {
cout << "(4) ^ (2.1) = " << pow (4, -2.1) << endl; // 0.0544094
cout << "(-4) ^ (-2.1) = " << pow (-4, -2.1) << endl; // -nan
cout << "(-4) ^ (2.1) = " << pow (-4, 2.1) << endl; // -nan
return 0;
}
输出:
(4) ^ (2.1) = 0.0544094
(-4) ^ (-2.1) = -nan
(-4) ^ (2.1) = -nan
我使用g++
编译了代码。
$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
尝试使用在线工具编译它,但显示了相同的结果:
- http://ideone.com/4xqNU7(C++11)
- http://ideone.com/4xqNU7(C++4.8.1)
- http://www.compileonline.com/compile_cpp0x_online.php
我能找到的唯一相关报价来自n1570。
一个实现可能给出零和非浮点值数字(如无穷大和NaN)是一个符号,或者可以留下它们未签名。无论这些值是无符号的检索标志的国际标准应产生未指明的标志,任何设置标志的要求已忽略。
如果x是有限负的,y是有限的但不是整数值导致域错误。如果x和y都为零,也可能导致域错误。如果x为零,y为负,则可能导致域错误或极点错误(或无,取决于库实施)。如果结果太大或太小,无法用的值表示返回类型。
在您的情况下
x=-4,y=-2.1,所以x是有限负的,y是有限的,但不是整数值。现在重新阅读引用的文本;)
从这里拍摄。
EDIT:函数的域是定义函数的集合。pow期望第二个参数是integer,以防第一个参数是整数。图书馆明确表示情况确实如此。
让我这样说:
-4^-2.1 = (-1)^-2.1 * 4^-2.1
的价值应该是多少
(-1)^2.1
sqrt(-1)
对于实数是未定义的
sqrt(-1) = i
对于复数。很明显,pow的返回值是一个实数。现在无法计算
-1^-0.1
在实数集上,所以它是一个NaN(不是数字)是一个自然的数学结果,因为在这种情况下它不是实数。要想了解更多的细节,你必须学习大量的数论。
相关文章:
- 如何防止Math.max()返回NaN
- 尝试求和时,在我的表的页脚中返回$NaN
- 为什么Math.pow(1,无穷大)返回NaN
- JavaScript:返回NaN(第2部分)
- 为什么这个代码返回NaN
- Protractor-分配给element.all.locator.count的变量返回NaN why
- javascript 在求和时返回 NaN
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 返回“[对象对象] NaN” - Javascript
- 返回为 NaN 的值
- 计算地理位置距离返回 NaN
- Javascript函数返回'NaN'或者'未定义'
- nan在C++中是什么意思?为什么pow(-4,-2.1)返回-nan
- 货币字段上的 parseInt 返回 NaN
- Javascript:解析csv中的字符串返回NaN(不是数字)
- JS脚本返回NaN
- 我如何才能得到返回'0'而不是NaN
- 解析html td返回NaN
- Javascript函数返回NaN
- 为什么angular.isNumber(NaN)返回true ?