c# - TimeSpan FromMilliseconds strange implementation? -
मैंने हाल ही में एनएटी टाइमप्न कार्यान्वयन में कुछ विचित्र व्यवहार का सामना किया है।
टाइमस्पेन परीक्षण = TimeSpan.FromMilliseconds (0.5); डबल एमएस = परीक्षा: कुछ मिलिसेकंड; // रिटर्न 0 FromMilliseconds पैरामीटर के रूप में एक डबल लेता है। हालांकि, ऐसा लगता है कि मान को आंतरिक रूप से गोल किया जाता है।
अगर मैं 5000 टिकों (.5 एमएस) के साथ एक नया बार-बार प्रारंभ करता हूं, तो कुल Milliseconds का मान सही है।
TimeSpan को देखते हुए परावर्तक में कार्यान्वयन से पता चलता है कि इनपुट वास्तव में लंबे समय तक लगाया जाता है।
माइक्रोसॉफ्ट ने क्यों नहीं किया है कि एक लंबे पैरामीटर के बजाय डबल पैरामीटर ले जाने के लिए माइक्रोसॉफ्ट ने क्यों डिजाइन किया है (क्योंकि इस कार्यान्वयन को दोहरे मूल्य बेकार है) ?
पहला विचार सोच रहा है कि उसने क्यों दो बार रिटर्न के रूप में चुना है मूल्य। लंबे समय का उपयोग करना एक स्पष्ट विकल्प होता। यद्यपि वहां पहले से ही पूरी तरह से अच्छी संपत्ति है जो लंबे समय तक है, हालांकि 100 नैनोकेकंडों की एक इकाई के साथ टिक्क्स स्पष्ट नहीं है। लेकिन उन्होंने दोहरा लिया, संभवतः एक आंशिक मूल्य वापस करने के इरादे से। हालांकि, एक नई समस्या पैदा हुई, जो शायद संभवतः बाद में पता चला था। एक डबल केवल 15 महत्वपूर्ण अंकों को स्टोर कर सकता है। एक टाइमस्पेन 10,000 वर्षों तक स्टोर कर सकता है। टाइमशैन से मिलीसेकेंड में कनवर्ट करने के लिए बहुत ही वांछित है, फिर टाइमसमैन पर वापस जाएं और एक ही मान प्राप्त करें। यह एक डबल के साथ संभव नहीं है गणित करना: 10,000 साल लगभग 10000 x 365.4 x 24 x 3600 x 1000 = 315,705,600,000,000 मिलसेकंड हैं। 15 अंकों की गणना करें, सर्वोत्तम एक डबल कर सकता है, और आपको बिल्कुल एक मिलीसेकंड की छोटी इकाई के रूप में मिलती है जो अब भी राउंड-ऑफ त्रुटि के बिना संग्रहीत हो सकती है। कोई अतिरिक्त अंक यादृच्छिक शोर होगा। एक चट्टान और एक कठिन जगह के बीच फंस, डिजाइनर (परीक्षकों?) TimeSpan से मिलीसेकेंड में परिवर्तित करते समय मूल्य को गोलाई के बीच चयन करना था। या बाद में ऐसा करने के लिए जब मिलीसेकेंड से टाइमस्पेन तक जा रहा है
टिक्स प्रॉपर्टी का उपयोग करके और मिलीसेकंड प्राप्त करने के लिए 1 ई -4 द्वारा गुणा करके अपनी समस्या का समाधान करें।
Comments
Post a Comment