c - Floating point precision nuances -
मुझे यह कोड NVIDIA के CUDA SDK नमूनों में मिला।
अयोग्य गणना गॉल्ड (फ्लोट * संदर्भ, फ्लोट * idata, कॉन्स्ट अहस्ताक्षरित अंतर लेन) {संदर्भ [0] = 0; डबल total_sum = 0; अहस्ताक्षरित int i; के लिए (i = 1; i & lt; len; ++ i) {total_sum + = idata [i-1]; संदर्भ [i] = idata [i-1] + संदर्भ [i-1]; } // यह उपयोग करने के लिए ठीक होना चाहिए! = क्योंकि हमारे पास पूर्णांक मूल्य हैं / / जहां एक श्रेणी में फ्लोट का प्रतिनिधित्व किया जा सकता है यदि (total_sum! = संदर्भ [i-1]) printf ("चेतावनी: एकल-सटीक सटीकता से अधिक स्कैन अयोग्य हो जाएगा। \ N "); } // (सी) एनवीडिया कॉर्प
क्या कोई मुझे एक ऐसा मामला बता सकता है जहां चेतावनी छपी जाएगी, और सबसे महत्वपूर्ण बात, क्यों।
फ़ंक्शन को कुछ निश्चित इनपुट डेटा के साथ दिमाग में लिखा जाता है। यदि उस इनपुट डेटा की अपेक्षा पूरी नहीं हुई है, तो चेतावनी प्रिंट होगी:
#include & lt; stdio.h & gt; #DEFINE COUNT_OF (x) (sizeof (x) / sizeof (0 [(x)]) शून्य computeGold (फ्लोट * संदर्भ, फ्लोट * idata, const अहस्ताक्षरित int लेन) {डबल total_sum = 0; अहस्ताक्षरित int i; संदर्भ [0] = 0; के लिए (i = 1; i & lt; len; ++ i) {total_sum + = idata [i-1]; संदर्भ [i] = idata [i-1] + संदर्भ [i-1]; } // यह उपयोग करने के लिए ठीक होना चाहिए! = क्योंकि हमारे पास पूर्णांक मूल्य हैं / / जहां एक श्रेणी में फ्लोट का प्रतिनिधित्व किया जा सकता है यदि (total_sum! = संदर्भ [i-1]) printf ("चेतावनी: एकल-सटीक सटीकता से अधिक स्कैन अयोग्य हो जाएगा। \ N "); } // (सी) एनवीडिया कॉर्प फ्लोट डेटा [] = {1.0, 2.0, 3.0, 4.0, 5.0}; फ्लोट डेटा 2 [] = {123456.0, 99 9999.0, 99 99 99.0, 99 9999.0, 99 99 99.0, 99 99 99.0, 99 99 99.0, 99 9999.0, 99 99 99.0, 99 9999.0, 99 99 99.0, 99 9999.0, 99 9999.0, 99 9999.0, 99 9999.0, 99 9999.0, 99 9999.0, 99 9999.0, 123456.0}; फ्लोट रिफ [COUNT_OF (data2)] = {0.0}; Int main () {computeGold (रेफरी, डेटा, COUNT_OF (डेटा)); ComputeGold (रेफरी, डेटा 2, COUNT_OF (डेटा 2)); वापसी 0; }
Comments
Post a Comment