为何x为负数时pow(x, 1.0/3.0)返回-1.#IND00?
负数调用pow计算三次方根返回-1.#IND00的原因
-1.#IND00是浮点数运算里的「不确定值」标记,本质是运算产生了无效的NaN(非数字)结果,原因如下:
C标准库的pow函数仅支持实数运算。当你传入负数作为底数,同时指数是非整数(比如1.0/3.0是浮点数,属于非整数)时,数学上的结果是复数,但pow无法返回复数类型,因此会生成无效的NaN值,也就是你看到的-1.#IND00。
如果要计算负数的三次方根(这是一个实数),不能直接用pow,需要手动处理符号:先对负数取绝对值计算三次方根,再添上负号。示例代码:
#include <math.h> #include <stdio.h> int main() { float x = -3.12; float y = x < 0 ? -pow(-x, 1.0/3.0) : pow(x, 1.0/3.0); printf("%f", y); return 0; }
内容的提问来源于stack exchange,提问作者woolMe
相关产品推荐
相关产品推荐

