क्या कोई ऐसा सॉफ्टवेयर है जो सांकेतिक फॉर्मूलों से संख्यात्मक-सटीक फ्लोटिंग पॉइंट C रूटीन को ऑटोजेनरेट कर सकता है?


25

वास्तविक चर के एक वास्तविक कार्य को देखते हुए, क्या कोई ऐसा सॉफ्टवेयर उपलब्ध है जो IEEE 754 अंकगणितीय से सुसज्जित मशीन पर सभी इनपुटों पर फ़ंक्शन की गणना करने के लिए स्वचालित रूप से संख्यात्मक रूप से सटीक कोड उत्पन्न कर सकता है?

उदाहरण के लिए, यदि वास्तविक कार्य का मूल्यांकन किया जाना था:

f (a, b, c) = \ frac {-b - \ sqrt {b ^ 2 - 4ac}} {2}}

सॉफ्टवेयर कम्प्यूटेशनल सटीकता में नुकसान से बचने के लिए इनपुट के कुछ सेट के लिए भयावह रद्द करने और संभवतः आउटपुट टेबल लुकअप पर विचार करेगा।

वैकल्पिक रूप से, क्या कोई ऐसा सॉफ्टवेयर है जो उच्च सटीकता के लिए दिए गए फ़ंक्शन की गणना करने के लिए एक शुद्ध तालिका-आधारित लुकअप रूटीन उत्पन्न कर सकता है?


5
सामान्य रूप से कठिन समस्या।
dmckee

1
यदि समस्या विशेष रूप से बहुपदों की मूल गणना (या कारक) के बारे में थी, तो वहाँ कुछ C (या C ++) लाइब्रेरी हैं।
मूला

2
आप फ्लोटिंग पॉइंट ब्लूज़ के बारे में ACCU जर्नल ओवरलोड में रिचर्ड हैरिस के लेखों की उत्कृष्ट श्रृंखला की जाँच करना चाहते हैं । मैंने उन लोगों के लिए Programmers.SX पर उन्हें अनुक्रमित किया, जिनकी रुचि हो सकती है।
मार्क बूथ

जवाबों:


25

सबसे अच्छा समाधान जो मुझे पता है कि मैथेमेटिका , मेपल , या सिम्पी में प्रतीकात्मक अभिव्यक्तियों को प्रोग्राम करना है ; लिंक के सभी कोड पीढ़ी प्रलेखन के लिए सीधे चलते हैं। उपरोक्त सभी कार्यक्रम C या फोरट्रान में कोड उत्पन्न कर सकते हैं।

IEEE 754 अंकगणित में उल्लेखित सटीकता के ऊपर कोई भी कार्यक्रम नहीं; सामान्य तौर पर, यह विनाशकारी नोटबंदी के सभी स्रोतों का अनुमान लगाना मुश्किल होगा, जैसा कि @dmckee नोट्स। संख्यात्मक विश्लेषण में मानव विशेषज्ञता को प्रतिस्थापित करना कठिन है।

एक ठोस उदाहरण प्रदान करने के लिए, में मनमाने आदानों के लिए उच्च परिशुद्धता के त्रिकोणमितीय कार्यों की गणना करने पर विचार करें । ऐसा करने के लिए कई रणनीतियां हैं, कुछ भी हार्डवेयर पर निर्भर हैं, जैसा कि विकिपीडिया लेख ट्रिगोनोमेट्रिक टेबल्स में देखा गया है । सभी एल्गोरिदम को सरलता और संख्यात्मक विश्लेषण की आवश्यकता होती है, यहां तक ​​कि एल्गोरिदम लुकअप टेबल और टेलर श्रृंखला या प्रक्षेप पर निर्भर करते हैं (विकिपीडिया लेख तालिका-निर्माता की दुविधा को देखें )। अधिक विवरण के लिए, संबंधित स्टैक ओवरफ्लो प्रश्न देखें त्रिकोणमितीय कार्य कैसे करते हैं? [0,2π]

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


4
"संख्यात्मक विश्लेषण में मानव विशेषज्ञता को बदलना कठिन है।" - यह अकेला एक +1 का हकदार है।
JM

"यह कठिन है" वैसा ही नहीं है जैसा कि "यह असंभव है"। कुछ नौकरियों (जैसे संकलक लेखक) के लिए "पूर्ण रोजगार सिद्धांत" हैं। क्या संख्यात्मक विश्लेषकों के लिए एक है?
छद्म नाम


14

अगर आप इस तरह के सॉफ्टवेयर पैकेज से कितनी दूर हैं, इसका अंदाजा आप इस बात से लगा सकते हैं कि कृपया 2001 के LAPACK वर्किंग नोट पर गौर से और कुशलतापूर्वक Givens के रोटेशन की गणना करें । मैं संख्यात्मक विश्लेषण में सबसे गैर-विशेषज्ञों (और कई विशेषज्ञों!) की उम्मीद करूँगा कि इस तरह के एक सामान्य रूप से सरल समस्या को हल करने में कितना विश्लेषण किया गया है।

f,gCcRsC

R(c,s)[fg]=[css¯c][fg]=[r0]

R(c,s)


1
+1 यह एक बेहतरीन उदाहरण है, धन्यवाद। मुझे लगता है कि यदि वास्तविक का कोई समाधान मौजूद है, तो इसे जटिल संख्याओं के अनुकूल बनाया जा सकता है।
डैनियल ट्रेबिएन

मुझे शायद यह उल्लेख करना चाहिए कि मूलभूत कठिनाई इस तथ्य में नहीं है कि एस जटिल हो सकता है, लेकिन अनावश्यक अतिप्रवाह और / या अंडरफ्लो से बचने में। यह हाइप फंक्शन से संबंधित है: en.wikipedia.org/wiki/Hypot
जैक पोल्सन

11

कोड अभिव्यक्ति और गणितीय अभिव्यक्तियों का प्रसार अधिक लोकप्रिय हो रहा है।

जबकि SymPy, Mathematica, और Maple जैसे प्रतीकात्मक पैकेज में कोड पीढ़ी शामिल हो सकती है, मुझे विश्वास नहीं है कि उनमें से कोई भी संख्या विज्ञान के बारे में कठिन सोचता है।

वहाँ अन्य परियोजनाओं के एक जोड़े को देख सकते हैं कि दोनों प्रतीकों और संख्या विज्ञान में रुचि रखते हैं।

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

सर्पिल भी आपके लिए दिलचस्प हो सकता है। वे एक सार वाक्यविन्यास के पेड़ को भी दबाते हैं और सांख्यिक मुद्दों की तलाश भी करते हैं। वे स्केलर ऑपरेशन (आपके उदाहरण की तरह) से अधिक चिंतित हैं। हालाँकि वे एक विशेष डोमेन के लिए भी काफी विशिष्ट हैं।

हालांकि इस क्षेत्र में वृद्धि उत्साहजनक है। एक आशावादी हो सकता है कि आपके प्रश्न का कुछ वर्षों में बेहतर जवाब होगा।


2
माना; शायद मेरा जवाब बहुत निराशावादी के रूप में आया था, क्योंकि डोमेन विशिष्ट समाधान बहुत सारे हैं, लेकिन सामान्य समस्या है ... कठिन।
जैक पोल्सन

4

सामान्य तौर पर, मैं सुरक्षित रूप से कह सकता हूं कि SymPy में कोड जनरेटर के कार्यान्वयन ने भी = P की कोशिश नहीं की।

पाओलो बिआंटीनी ने रैखिक बीजगणित एल्गोरिदम के स्थिरता प्रमाण उत्पन्न करने के लिए एक विधि विकसित की है, जो रॉबर्ट वैन डे गीजन की फ्लेम संकेतन का उपयोग करके उत्पन्न की जाती है।

इस पत्र को देखें , या एक लंबे समय तक काम कर रहे नोट संस्करण


1

ऋषि आपको साइथन में सूत्र व्यक्त करने देता है (अजगर का एक प्रकार जो सी कोड उत्पन्न करता है); हालाँकि, आपके अधिक सामान्य प्रश्न के उत्तर में: नहीं। राइस के प्रमेय पर विचार करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.