मैं आज सुबह एक रहस्यमय बग लग रहा था कि मुझे बहुत भाग्यशाली लगता है कि वह बहुत जल्दी समाधान के लिए ठोकर खा रहा है।ओपनजीएल शेडर्स में NaN के पता लगाने का सबसे अच्छा तरीका
मैं एक टुकड़े से एक टुकड़े टुकड़े के अंदर औसत उत्पादन करने के लिए विभाजित कर रहा था, और निश्चित रूप से जब काउंटर शून्य है, परिणामी रंग मान NaN बन गया।
मिश्रण के दौरान, एनवीडिया स्वीकार्य रूप से NaN को 0 मान के रूप में मानता है, लेकिन इंटेल नाक को कैस्केड नहीं करता है और जिसके परिणामस्वरूप काले टुकड़े होते हैं।
और इसलिए यह बग तब तक जारी रहा जब तक कि मैंने इंटेल मशीन पर कोड का परीक्षण नहीं किया।
मुझे आश्चर्य है कि क्या कुछ ऐसा है जो मैं अवैध मूल्यों को "जाल" करने के लिए कर सकता हूं। ऐसा लगता है कि, नियमित प्रोग्रामिंग के रूप में, केवल एकमात्र निश्चित (और फिर भी यह बुलेटप्रूफ महसूस नहीं करता) इस से निपटने का तरीका है संख्याओं को विभाजित करते समय सभी संभावित मामलों पर ध्यान से विचार करना।
NaN का पता लगाने का मानक तरीका यह देखने के लिए है कि कोई संख्या स्वयं के बराबर नहीं है या नहीं। क्या मैं शायद एक डीबग शेडर का निर्माण कर सकता हूं जो यह देखने के लिए प्रत्येक खंड को जांचता है कि यह स्वयं के बराबर नहीं है, और यदि वह स्थिति पूरी हो जाती है, तो चमकती, विशिष्ट रंग सेट करें? क्या जीएलएसएल मुझे इस तरह एक नाएन का पता लगाने की इजाजत देता है या जब भी कोई मान अमान्य होता है तो मैं अपरिभाषित व्यवहार से फंस जाता हूं?
आप 0 से विभाजित क्यों करते हैं? क्या आप काउंटर 0 को पकड़ नहीं सकते हैं या अपना एल्गोरिदम बदल सकते हैं? – djmj
प्रोग्रामर के लिए हमेशा यह जांचना उचित होता है कि एक संभावित संप्रदाय शून्य हो सकता है लेकिन जांच प्रदर्शन लागत लग सकती है। मेरा सवाल तथ्य के बाद खराब मूल्यों की पहचान से संबंधित है। –