[英]Is it possible to create a pow(double a, double b) function in C without assembly?
是否可以創建一個函數,該函數需要一個double並將其提升為純C語言中另一個double的冪? 如(3.5 2.7 )。 有人告訴我這只有在使用匯編編寫函數時才有可能。
誰告訴你pow()
函數只有在使用匯編的情況下才可能實現,是錯誤的。 這顯然是錯誤的,因為求冪的數學概念比計算機早了2000多年。 1對數是在約400年前發明的(一種簡化涉及冪運算的計算方法),並立即遵循了計算規則。 2在數字計算器發明之前,計算尺是用於計算算術表達式的主要工具。
您可能已經上過數學課,其中涉及對數和指數表項使用插值來執行計算。 3如果您還記得這樣的課程,則暗示可以使用常規數學執行這些計算。 無論如何,這也是教導對數和指數性質的地方。
在微積分中,有一個關於泰勒級數的課程,以及如何使用泰勒多項式近似函數。 4由於對數的Maclaurin級數(泰勒級數以0為中心)僅在參數位於區間(-1,1)內時才收斂,因此您可以使用常規數學將參數縮小,並使用數學來調整計算出的答案得到想要的答案。 例如,要計算ln
(2.7),可以計算ln
(2.7) ln
(2 2 )+ ln
(2 2 )= ln
(2.7 / 2 2 )+ ln
(2 2 )= ln
(0.675)+ 2 × ln
(2)。 在第一學期使用Maclaurin系列,並查找ln
(2)的表,即可得到答案。
不管pow()
函數是通過程序集實現還是不通過程序集實現,它只是在計算一個人告訴它要計算的內容。 沒有在硬件上完成的魔術無法在軟件或紙上完成。
有些事情只能在組裝中完成,因為否則儀器將無法訪問。 對於普通算法,例如計算,卻並非如此。 pow函數有什么特別之處,使您無法用C編寫它? 如果以匯編形式編寫它,可能會更快,但這並不是實現它的障礙。
你可以不計算任何裝配(你可能會用手工計算它以同樣的方式),但它會慢得多 ; 這就是為什么沒有人在不使用特殊硬件支持的情況下做這些事情的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.