我读到pow(double,double)函数是在“math.h”中定义的,但我找不到它的声明。pow函数在C中定义和实现在哪里?
有没有人知道这个函数在哪里声明?它在C中实现的地方是什么?
参考:
http://publications.gbdirect.co.uk/c_book/chapter9/maths_functions.html
我读到pow(double,double)函数是在“math.h”中定义的,但我找不到它的声明。pow函数在C中定义和实现在哪里?
有没有人知道这个函数在哪里声明?它在C中实现的地方是什么?
参考:
http://publications.gbdirect.co.uk/c_book/chapter9/maths_functions.html
我math.h
是真正定义。你有没有试过包括math.h
,并简单地使用pow
? “无法找到它”是什么意思?
是的,我可以使用它,但无法找到它的声明。有人可以在math.h中找到它的声明和实现吗?请在这里发布。谢谢。 – root 2009-11-09 08:26:45
例如,isless函数被声明为: 的#ifndef isless #限定isless(X,Y)\ (__extension__ \t \t \t \t \t \t \t \ ({__typeof __(x)的__X =(X); __typeof __( Y)__y =(Y);!\t \t \t \ isunordered(__X,__y)&& __X <__y;})) #ENDIF 我希望这种情况发生战俘类似的事情(双,双) – root 2009-11-09 08:28:04
很多时候,包含文件(如<math.h>
)将包含其他头文件,这些头文件实际上会声明您在<math.h>
中会看到的功能。这个想法是,当程序包含<math.h>
时,即使实际的函数定义在其他头文件中,程序也能得到它所期望的结果。
查找执行的标准库函数,如pow()
是另一回事。您将不得不将源代码挖掘到C标准运行时库并在其中找到实现。
注意,最编译器确实为图书馆提供了资源。但它有时可能是一个迷宫。 – 2009-11-09 08:34:04
它的定义取决于您的环境。代码位于某个已编译的C标准库中。
它的“定义”在你的c标准库发行版的源代码中。 eglibc就是这样一种分布。这是可浏览网上,或者在源分布:
简短的回答:在C标准库的源代码。
很多难以阅读的代码。 :) – pbos 2009-11-09 12:44:21
pow
的实际实现可能因编译器而异。通常,math.h(或math.h包含的特定于供应商的文件)为pow
(即其声明)提供原型,但实现被隐藏在某些库文件(如libm.a)中。根据您的编译器,pow
或任何其他库函数的实际源代码可能不可用。
声明:在您的系统/ SDK(例如包含目录:/usr/include;/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.2.sdk/usr/include/architecture/ ARM /文件math.h)
定义(实现):
在战俘手段函数声明extern关键字,那它的定义在别处。数学函数是大多数以汇编代码(* .s)完成的低级高性能实现。汇编例程(通过寄存器/堆栈获取参数/给出参数)与C库的其余部分链接。链接/导出函数/例程名称是特定于平台的,并且如果某个目标不适用于汇编代码,则无关紧要。
我希望这有助于, 拉斐尔
如果你正在寻找的计算是如何实现的,你可以在这里找到: http://fossies.org/dox/gcc-4.5.3/e__pow_8c_source.html 函数的名称是__ieee754_pow 这是由POW函数调用。
下面是fdlibm C实现:http://www.netlib.org/fdlibm/e_pow.c
对于它的价值,当V8放弃了COS /正弦表,它fdlibm的实施拉到这样做:https://code.google.com/p/v8/source/detail?r=22918
从改变提交评论: “使用fdlibm端口实现三角函数”。另一方面,Mozilla调用cstdlib数学函数,它将通过构建和系统(例如:可能会或可能不会调用超越函数的芯片级实现)而具有可变性能。尽管C#字节码在可能的时候似乎明确引用了芯片级功能。然而,“pow”不是其中之一,iirc(似乎没有芯片级功能)并且在其他地方实施。
参见:https://bugzilla.mozilla.org/show_bug.cgi?id=967709
对于Mozilla社区余弦/正弦讨论,Mozilla的执行VS老V8执行的比较。
参见:How is Math.Pow() implemented in .NET Framework?
内在功能是芯片级,在处理器上实际实现。 (我们不一定需要查找表。)
如果它不是直接在'math.h'中,只要标记包含,具有标记功能(或类似功能)的体面编辑器就会将您带到声明的正确位置文件目录为您的C运行时库。几乎任何像样的编程编辑器都会拥有这种能力。 – 2009-11-09 08:32:11
我不知道你使用的是什么编译器,但是它看起来像MSVC 9,不包括'pow()'的源代码。这个实现似乎在一个没有包含源文件的'tran.lib'库中。 – 2009-11-09 08:53:13