2013-07-02 63 views
7

我想知道爲什麼有SQRT()在C/C++函數,我們可以使用差(X,0.5)

pow(x,0.5); 

實現相同如何爲pow(x,0.5)sqrt(x)不同。是否有具有sqrt功能的特定原因?

+0

我不認爲這是對一個特殊原因。由於平方根操作非常普遍,與'pow()'相比,'sqrt(x)'提高了可讀性。 – GeekFactory

+7

爲什麼有自行車時有自行車? –

+1

當你可以添加循環時,爲什麼我們要乘法運算? –

回答

10

我跑的測試,爲您檢查sqrt(x)性能和pow(x,0.5)

1.

for(int i=0;i<100000000;i++) 
    pow(double(i),0.5); 

2.

for(int i=0;i<100000000;i++) 
    sqrt(double(i)); 

一日一花20秒左右,其中爲第一個在我的電腦上花了大約2秒鐘。所以表現會更好。至於其他已經提到的可讀性是其他原因。

+0

我得到相反的結果... –

+0

我居然跑測試只有3次,以確保。我沒有得到太多的變化。請再檢查一次。 – banarun

+1

[測試](http://ideone.com/dlwLGR)。 –

5

當然,如果你認爲只有數學等價的...

但是在算法來計算結果來看,sqrt是專用於一兩件事,而pow是通用的。

所以你可以(正確地)假設可以寫sqrt的函數比編寫通用的pow函數更快。

5

我記得讀書的地方,開方()是由IEEE規範保證是正確舍入的特殊情況。我會仔細查看來源。它也應該快一點,因爲它只需要處理一個案例。

即使他們是一樣的,它是很好的有一個常用功能的內置別名!

編輯:根據IEEE-754,兩者POW()函數和平方根()都應該被實現爲使得舍入值是最接近的可能浮點表示的實際值。但是,sqrt()仍然應該更快。

+0

見http://stackoverflow.com/questions/22259537/ –