
pow() 函数用来求 x 的 y 次幂(次方),其原型为:double pow(double x, double y)pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。可能导致错误的情况:
如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。
如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。
如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。
如果返回值 ret 太大或者太小,将会导致 range error 错误。
像 pow(10,2) 这种调用,gcc 在编译时就可以将其替换为对应的值(gcc 优化的一部分),从而不需要链接 pow 所在的数学库 libm;而像 pow(x,2)这种调用,一般无法做这种替换,因此需要链接 libm。或者编译时加上-O2参数。
math.h的函数不在libc.a(静态链接)或者libc.so(动态链接)里面,它在libm.a或者libm.so里面。
比如pow函数,你man 3 pow,它有一句“Link with -lm”的,其他没提示的标准c函数是-lc的,不过通常是不用加-lc的,因为gcc默认会自己帮你添加,这些都搜索路径写在gcc程序的内部。
如果你自己修改然后重新编译一个gcc,可以定义其他搜索路径,当然不推荐这样做。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)