我讀到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