NAN 使用 pow 评估指数时,但如果我迭代,答案正确?

NAN when evaluating exponential using pow but correct answer if I iterate?

本文关键字:迭代 答案 如果 pow 使用 评估 指数 NAN      更新时间:2023-10-16

使用 cmath 库中的pow()时,我得到了 NaN,但如果我迭代功率的长度,它会起作用吗?

我正在尝试评估y=0.05*(1+-2.01655)^x90 < x < 180和我在使用pow((1+-2.01655),x)时在哪里接收 NaN,但在 for 循环中迭代会得到正确答案?值得注意的是,excel也表现出类似的问题(无法评估原始形式,但可以评估分段形式(。

double var = -1.01655;
double final = 1;
for(int i=0 ; i<ceil(x); i++){
final *= var;
}
final = 0.05 * final;

取一个数字的小数指数意味着第 n 个根运算;例如pow(2, 3.0 / 2.0) == sqrt(pow(2, 3)).

负数通常具有虚根。 双打的std::pow只处理实数。 当然,1 - 2.01655是负数,因此您的方程只有 x 整数值的实际结果。我想你会发现 x 的整数值生成结果,非整数值生成 NaN。循环工作的原因是您计算的是整数幂,而不是分数幂。

请参阅 cpp首选项;有关错误处理的部分:

如果基数是有限的和负的,exp是有限的和非整数的,则 发生域错误,并且可能发生范围错误。