如何在linux内核里计算pow

如何在linux内核里计算pow,第1张

要包含头文件:#include <math.h>

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,可以定义其他搜索路径,当然不推荐这样做。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8694448.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存