2010-10-01 17 views
15

संभव डुप्लिकेट:
How do Trigonometric functions work?ट्रिग कार्यों के कम्प्यूटेशनल लागत

क्या वास्तव में पाप, क्योंकि, टैन और Atan तरह ट्रिग कार्यों की गणना में चला जाता है?

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

सी ++ और पायथन का उपयोग करते हुए, लेकिन मुझे लगता है कि यह गणितीय ऑपरेशन लागत के साथ सबसे प्राचीन परिचालनों के सापेक्ष होने वाली काफी भाषा अज्ञेयवादी है।

+1

आपको लगता है कि चिंतित है, तो आप ये मान (या तो एप्लिकेशन पर शुरू करते हैं, या उन्हें एक पाठ फ़ाइल में बचाने के लिए और लोड कि) की जरूरत है precalculate सकता है उन्हें तालिकाओं में संग्रहीत करते हैं, और फिर बस देखो कर रहे हैं उन्हें ऊपर। – FrustratedWithFormsDesigner

+1

मैं इस विशिष्ट मामले में नहीं हूं, यह कुछ ऐसी समझने के बारे में अधिक है जिसे मैं हमेशा अस्पष्ट करता हूं। – ack

+0

@AK: उस स्थिति में, आप शायद इस प्रश्न को देखना चाहें: http://stackoverflow.com/questions/345085/how-do-trigonometric-functions-work – FrustratedWithFormsDesigner

उत्तर

6

आधुनिक x86 प्रोसेसर में उनके निर्देश सेट में ट्रिग फ़ंक्शन शामिल हैं, लेकिन वे निष्पादित करने के लिए कई चक्र लेते हैं। तो यदि आप ऐसे प्रोसेसर पर हैं, और यदि आपके कोड में कोई निर्भरता नहीं है (यानी आपको अगली शुरू करने के लिए एक पाप गणना के परिणाम की आवश्यकता नहीं है), तो शायद आपको नहीं मिलेगा पाप और कोस का उपयोग करने से बहुत तेज़, क्योंकि वे पूरी तरह पाइपलाइन होंगे, प्रति चक्र 1 की प्रभावी दर प्राप्त करेंगे।

+3

मेरा मानना ​​है कि पूर्ण ट्रिग फ़ंक्शन 1 प्रति चक्र से बहुत धीमे होते हैं। ट्रिगर फ़ंक्शन को पूरा करने के इंतजार के दौरान आप अन्य चीजें करने में सक्षम हो सकते हैं, लेकिन ट्रिग ऑपरेशंस स्वयं को इस तरह से पाइपलाइन नहीं किया जाता है। – comingstorm

+0

तो, आप अनुमान लगाकर चीजों को गति देने में सक्षम हो सकते हैं, या आप नहीं कर सकते - आपके आवेदन के आधार पर, और आप कितना अनुमान लगा सकते हैं। – comingstorm

+0

इसके अलावा, ट्रिगर से बचने के लिए अपने गणित को फिर से काम करना कभी-कभी आपके कोड को एक बड़ा सौदा, सरलता से ट्रिगर ऑपरेशन की लागत से पूरी तरह से स्वतंत्र कर सकता है। – comingstorm

0

अधिकांश ट्रिगर फ़ंक्शंस इन दिनों लुकअप टेबल के रूप में कार्यान्वित किए जाते हैं।

0

त्रिकोणमितीय कार्यों से मेरा अनुभव है कि वे बहुत तेज कर रहे हैं, और उनमें से ज्यादातर रूप lookup tables वैसे भी लागू किया जाता है कि ... यही है, कुछ डिवीजनों और विभाजन-दर-शून्य चेकों शायद एक की तुलना में धीमी हो जाएगा रहे हैं एक त्रिकोणमितीय समारोह को बुलाओ।

+0

विभाजन से तेज़? मुझे लगता है कि दो पूरी तरह से अलग चीजों की तुलना कर रहा है और यह आर्किटेक्चर विनिर्देशों का सवाल बन जाता है ... यदि यह वास्तव में एक लुकअप टेबल है, तो यह मेरी पुरानी विधि को शुद्ध ट्रिगर कार्यों के साथ तेज करेगा, नहीं? – ack

+0

मुझे ऐसा लगता है, हाँ। एक लुकअप टेबल के लिए मेमोरी एक्सेस की आवश्यकता होती है, जब तक कि आप कैश के कुछ स्तर पर हिट न करें। – aioobe

+0

@aioobe, मुझे यकीन है कि कई प्रणालियों के लिए लुकअप टेबल ऑन-चिप लागू किया गया है, ताकि कोई मेमोरी एक्सेस की आवश्यकता न हो। मुझे लगता है कि लुकअप टेबल में एक त्रुटि कुछ साल पहले कुख्यात पेंटियम गणित की समस्या का कारण थी। –

8

आपको अपना कोड लॉग इन करने की आवश्यकता है!

आपको इसे स्वयं प्रोफाइल करना होगा। मेरे परिणामों के आधार पर, ट्रिग फ़ंक्शंस लगभग 100 एनएस और डिवीजन लगभग 20 एनएस लेते हैं। इसे आसानी से उत्तर में परिवर्तित किया जा सकता है। लेकिन फिर, सबसे महत्वपूर्ण बात यह है कि आप इसे अपने हार्डवेयर पर प्रोफाइल करते हैं। इस तरह आप अपने सिस्टम के लिए बिल्कुल सही जवाब और ज्ञान प्राप्त करते हैं।

+4

बेशक यह काम पूरा हो जाएगा, लेकिन यह वास्तव में मुझे नहीं बताएगा कि यह तेज़ क्यों है। – ack

1

(यह मूल रूप से codekaizen के जवाब पर एक टिप्पणी थी, लेकिन यह बल्कि लंबे मिला ....)

(Codekaizen): अधिकांश ट्रिग कार्यों देखने तालिकाओं के रूप में लागू किया जाता है इन दिनों।

उम .. चूंकि ज्यादातर ट्रिग समारोह एक डबल परिशुद्धता तर्क ले, मूल्य को देख व्यावहारिक नहीं है। मेरा मानना ​​है कि ज्यादातर तरफ से पूर्णांक को देखते हैं और फिर वहां से अलग हो जाते हैं (यानी पाप (5.279) पाप (5) से पाप (6) तक 27.9% है। वह कम काम जो मूल्य की गणना सीधे करता है, लेकिन फिर भी गणना की उचित मात्रा है।

+0

मैंने कभी एक टेबल नहीं देखी है जहां प्रत्येक विशिष्ट डबल मान संग्रहीत किया जाता है। – codekaizen

+0

@codekaizen: मेरे पास भी नहीं है। मेरा मुद्दा यह है कि आपका जवाब आपके पास लागू है। –

+0

मैं नहीं देख सकता कि आप इसे कैसे तर्कसंगत तरीके से लागू कर सकते हैं। मूल्यों की एक तालिका को देखते हुए सभी संभावित मूल्यों का अर्थ नहीं है। एक पल के प्रतिबिंब को उपज करना चाहिए कि सभी मूल्यों को कवर करने वाली तालिका केवल अनुचित है। – codekaizen

0

एकमात्र वास्तविक उत्तर जिसे आप इसे प्राप्त करने जा रहे हैं "प्रोफ़ाइल।"

अधिकतर, यदि यह आपके कोड में बाधा नहीं है तो इससे कोई फर्क नहीं पड़ता।

0

glibc पर एक नज़र डालें। यह उनमें से कुछ अलग-अलग कार्यान्वयन का उपयोग करता है (जैसे sysdeps/ieee754/s_sin.c) वास्तव में जटिल लगते हैं जबकि अन्य असेंबली निर्देश (जैसे sysdeps/x86_64/fpu/s_sincos.S) का उपयोग करते हैं। कुछ मापों के बिना आवश्यक वास्तविक समय बताना मुश्किल है।

0

ट्रिगोनोमेट्रिक फ़ंक्शंस का मूल्यांकन करने के लिए निकटतम इष्टतम विधि (और आमतौर पर उपयोग की जाने वाली विधि) ऑर्थोगोनल बहुपद विस्तार (चेबिशहेव श्रृंखला) के माध्यम से होती है। ऐसी श्रृंखला एक उचित संख्या के साथ तालिका लुकअप से तेज होगी।

http://en.wikipedia.org/wiki/Chebyshev_polynomials

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