डेटा की गुणवत्ता

निर्देशांकों की सटीकता और फ़्लोटिंग-पॉइंट राउंडिंग त्रुटियाँ

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

सिंगल-प्रिसिज़न फ़्लोटिंग पॉइंट संख्याएँ, जिन्हें आम तौर पर float32 कहा जाता है, लगभग सात सार्थक दशमलव अंकों की सटीकता रखती हैं। अक्षांश या देशांतर के मान के लिए, जिसे सिर्फ़ पूर्णांक डिग्री वाले हिस्से को दर्शाने के लिए दशमलव बिंदु से पहले कई अंकों की ज़रूरत होती है, इससे दशमलव बिंदु के बाद असली सटीकता के काफ़ी कम अंक बचते हैं, उस डबल-प्रिसिज़न फ़्लोटिंग पॉइंट की तुलना में, जिसे आम तौर पर float64 कहा जाता है, जो उसी मान के लिए मिलता। व्यावहारिक रूप से, निर्देशांकों को float64 के बजाय float32 में स्टोर करने से, सटीक अक्षांश पर निर्भर करते हुए, एक मीटर या उससे ज़्यादा की राउंडिंग त्रुटि आ सकती है, जो मूल जियोकोडिंग मिलान की किसी भी सटीकता सीमा से पूरी तरह अलग और उसके अतिरिक्त है।

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

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

हमारे फ़ॉरवर्ड और रिवर्स जियोकोडिंग एंडपॉइंट से लौटाए गए निर्देशांक पूरे डबल-प्रिसिज़न दशमलव मान रखते हैं। अपने स्टोरेज और गणना की पाइपलाइन में उस सटीकता को बनाए रखने की सीधे जाँच करना उचित है, बजाय यह मानने के कि यह हर कदम पर अपने आप बनी रहती है।