C 中 sqrt 函式的原理是什麼?

時間 2021-06-02 22:53:54

1樓:

計算機求平方根用的是「牛頓逐步逼近法」。基本思想是先對第一次 sqrt() 的結果進行乙個猜測,然後通過計算去得到乙個更好的猜測,逐漸能讓 sqrt() 「逼近」出使用者所期待的精度。假設我們要計算x的平方根,那麼我們先猜乙個y值,然後求出y和x/y的平均值(這樣的結果更加接近實際的平方根),然後不斷經過迭代,能獲得我們最後需要的精度。

關於這個概念比較深入的描述,建議去閱讀一下《Structure and Interpretation of Computer Programs》這本書。

2樓:

defBiSqrt(x

,e)://

Binary

solution

assert

x>=0assert

e>=0low=0

high

=max(1

,x)guess=(

low+

high)/

2.0count

=100

while

abs(

guess**2

-x)>

eand

count

>0:

ifguess**2

low=

guess

else

:high

=guess

guess=(

low+

high)/

2.0count-=1

return

guess

defNtSqrt(x

,e)://

Newton

soultion

assert

x>=0assert

e>=0guess

=float(x

/2.0

)diff

=guess**2

-xcount

=100

while

abs(

diff

)>eand

count

>=0:

guess

-=diff/(

2.0*

guess

)diff

=guess**2

-xcount-=1

return

guess

Python寫的。。我覺得原理應該差不多,二分法和牛頓法,e是精度。

C 中的constexpr函式有什麼作用?

C十十20年 新標準不是這樣描述的,參見 C 程式設計精要教程 介紹的2017標準,primer好像是2011標準。其實質含義是,當呼叫該函式用常量作為實參時,編譯程式應盡量根據函式體計算出其返回值,該值若在編譯時能計算出來,它也是乙個作為返回值的常量。因此,這樣的函式和呼叫可被優化掉,而不存在於編...

為什麼C 中沒有階乘函式?

呂不鬧 如果只是問為什麼,那麼答案應該是 委員會那些老學究不允許太多無關緊要的功能進入標準。可能他們覺得 CPPer 都能自己寫出來吧。 簡易版 include include include include include using namespace std intmain O 1 版 inc...

C 有提供像是 C 中 realloc 這樣的函式的新版本嗎?

自己實現可以使用從c那繼承過來的realloc,但是c 的new和allocator體系沒有類似的支援,這就導致了vector在擴容時必須申請一塊新的記憶體並複製,標準也是這樣要求的,就算是標準庫的作者想在底層用realloc去針對可平凡複製構造 析構的型別做這樣的優化也不行。我想c 不提供新的re...