2013-07-02 12 views
7

Ich frage mich, warum es sqrt() Funktion in C/C++ ist wie wir das gleicheUnterschied zwischen sqrt (x) und pow (x, 0,5)

pow(x,0.5); 

mit erreichen können, wie ist sqrt(x) unterschiedlich für pow(x,0.5) . Gibt es einen bestimmten Grund für die Funktion sqrt?

+0

Ich glaube nicht, dass es einen besonderen Grund dafür gibt. Als Quadratwurzeloperation ist es sehr üblich und 'sqrt (x)' verbessert die Lesbarkeit im Vergleich zu 'pow()'. – GeekFactory

+7

Warum gibt es ein Fahrrad, wenn es ein Fahrrad gibt? –

+1

Warum haben wir Multiplikation, wenn Sie nur in einer Schleife hinzufügen können? –

Antwort

10

lief ich einen Test für Sie die Leistung von sqrt(x) und 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)); 

erste einer dauerte etwa 20 Sekunden, wo als zweite ein überprüfen dauerte ungefähr 2 Sekunden auf meinem Computer. Leistung ist also viel besser. Wie andere bereits erwähnt haben, ist Lesbarkeit ein anderer Grund.

+0

Ich habe die entgegengesetzten Ergebnisse ... –

+0

Ich lief tatsächlich den Test 3 mal, nur um sicherzustellen, dass. Ich habe nicht viel Abwechslung bekommen. Bitte überprüfe es nocheinmal. – banarun

+1

[Testen Sie es] (http://ideone.com/dlwLGR). –

5

Sicher, wenn Sie nur die mathematische Äquivalenz denken ...

Aber in Bezug auf Algorithmen, um das Ergebnis zu berechnen, ist sqrt auf eine Sache spezifischen während pow generisch ist.

Sie könnten also (zu Recht) annehmen, dass es möglich ist, eine schnellere Funktion für sqrt zu schreiben, als die generische pow-Funktion zu schreiben.

5

Ich erinnere mich irgendwo zu lesen, dass sqrt() ein Sonderfall ist, der durch die IEEE-Spezifikation garantiert wird, um richtig gerundet zu werden. Ich werde das nachsehen, um eine Quelle zu finden. Es sollte auch ein wenig schneller sein, weil es nur einen Fall behandeln muss.

Auch wenn sie gleich waren, ist es schön, einen eingebauten Alias ​​für eine häufig verwendete Funktion zu haben!

Edit: Nach IEEE-754 sollen sowohl die pow() - Funktion als auch sqrt() so implementiert werden, dass der gerundete Wert die möglichst genaue Gleitkommadarstellung zum realen Wert ist. Allerdings sollte sqrt() immer noch schneller sein.

+0

Siehe http://StackOverflow.com/Questions/22259537/ –

Verwandte Themen