2013-07-02 9 views
7

मैं सोच रहा था क्यों है sqrt() सी/सी में समारोह ++ के रूप में हमअंतर (एक्स, 0.5)

pow(x,0.5); 

का उपयोग कर एक ही प्राप्त कर सकते हैं कैसे pow(x,0.5) के लिए sqrt(x) अलग है । क्या एसकर्ट फ़ंक्शन होने का कोई विशिष्ट कारण है?

+0

मुझे नहीं लगता कि इसके लिए एक विशेष कारण है। स्क्वायर रूट ऑपरेशन बहुत आम है और 'sqrt (x)' 'pow()' की तुलना में पठनीयता में सुधार करता है। – 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)); 

1 एक जहां 2 एक के रूप में चारों ओर ले गया 20 सेकंड मेरे कंप्यूटर पर लगभग 2 सेकंड लग गए। तो प्रदर्शन बेहतर तरीका है। जैसा कि अन्य ने पहले ही पठनीयता का उल्लेख किया है, अन्य कारण है।

+0

देखें मुझे विपरीत परिणाम मिल गए हैं ... –

+0

मैं वास्तव में सुनिश्चित करने के लिए परीक्षण 3 बार चला गया। मुझे बहुत भिन्नता नहीं मिली। कृपया दोबारा जांच करें। – banarun

+1

[इसे टेस्ट करें] (http://ideone.com/dlwLGR)। –

5

ज़रूर, अगर आप केवल गणितीय तुल्यता के बारे में सोच ...

लेकिन एल्गोरिदम परिणाम की गणना करने के मामले में, sqrt एक बात जबकि pow सामान्य है के लिए विशिष्ट है।

तो आप (सही) मान सकते हैं कि sqrt के लिए जेनेरिक pow फ़ंक्शन लिखना एक तेज़ फ़ंक्शन लिखना संभव है।

5

मुझे कहीं पढ़ना याद है कि sqrt() एक विशेष मामला है जिसे आईईईई विनिर्देश द्वारा सही ढंग से गोल करने की गारंटी है। मैं इसे एक स्रोत खोजने के लिए देख लूंगा। यह थोड़ा तेज होना चाहिए, क्योंकि इसे केवल एक मामले को संभालना है।

भले ही वे समान थे, सामान्यतः उपयोग किए जाने वाले फ़ंक्शन के लिए एक अंतर्निहित उपनाम होना अच्छा लगता है!

संपादित करें: आईईईई -754 के अनुसार, दोनों पाउ() फ़ंक्शन और एसक्यूआरटी() को कार्यान्वित किया जाना चाहिए ताकि गोलाकार मूल्य असली मूल्य के निकटतम संभव फ़्लोटिंग पॉइंट का प्रतिनिधित्व हो। हालांकि, sqrt() अभी भी तेज होना चाहिए।

+0

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

संबंधित मुद्दे