2012-12-13 41 views
17

मेरे पास टाइम_टी - varEnd और varStart प्रकार के 2 चर हैं। अब ताकि उन्हें या तो बीच के अंतर को देखने के लिए मैंभिन्नता और '-' के बीच क्या अंतर है?

varEnd - varStart; 

या

difftime(varEnd, varStart); 

कर सकते हैं और दोनों सेकंड की संख्या देता है।

कृपया मुझे बताएं, अगर उनके पास कोई अंतर है? या अनुशंसित कौन सा है?

+2

इसे 'सी ++' के रूप में क्यों टैग किया गया है? –

+0

@PaulR: 'difftime()' दोनों सी और सी ++ में मौजूद है। –

+1

ठीक है आप शायद इसे पास्कल या फोरट्रान भी बना सकते हैं, लेकिन यह इसे पास्कल या फोरट्रान प्रश्न नहीं बनाता है। ;) –

उत्तर

27

भाषा निर्दिष्ट करता है कि time_t अंकगणितीय प्रकार बार प्रतिनिधित्व करने में सक्षम है। इसे किसी विशेष तरीके से समय का प्रतिनिधित्व करने की आवश्यकता नहीं है। time_t कुछ पल के बाद से सेकंड की संख्या के रूप में समय का प्रतिनिधित्व करता

हैं, तो - ऑपरेटर सही ढंग से दो time_t मूल्यों के बीच सेकंड में अंतर का परिकलन करेंगे।

यह नहीं (जैसे कि, अगर विवरण के स्तर को एक मिलीसेकंड है, या यदि एक time_t के टुकड़े वर्ष, माह, दिन आदि का प्रतिनिधित्व करने वाले समूहों में विभाजित हैं), तो - ऑपरेटर व्यर्थ परिणाम प्राप्त हो सकते है, तो।

दूसरी ओर, difftime() फ़ंक्शन, "जानता है" कैसे एक time_t एक समय का प्रतिनिधित्व करता है, और सेकंड में अंतर की गणना करने के लिए उस जानकारी का उपयोग करता है।

अधिकांश प्रयोगों, सरल घटाव और difftime() पर एक ही बात करने के लिए हो - लेकिन केवल difftime()सभी कार्यान्वयन पर सही ढंग से काम करने के लिए गारंटी है।

एक और अंतर यह: difftime() फ्लोटिंग प्वाइंट प्रकार double का एक परिणाम देता है, जबकि "-"time_t पर मान प्रकार time_t का एक परिणाम अर्जित करता है। ज्यादातर मामलों में परिणाम पूरी तरह से आपके द्वारा निर्दिष्ट किए जाने वाले प्रकार के रूप में परिवर्तित हो जाएगा, लेकिन यदि time_t एक हस्ताक्षरित पूर्णांक प्रकार होता है, तो बाद के समय से बाद के समय का घटाव नकारात्मक मूल्य के बजाय बहुत बड़ा मूल्य उत्पन्न करेगा । मैंने देखा है कि प्रत्येक प्रणाली time_t को 32-बिट या 64-बिट हस्ताक्षरित पूर्णांक प्रकार के रूप में लागू करती है, लेकिन एक हस्ताक्षरित प्रकार का उपयोग करने की अनुमति है - एक और कारण है कि time_t मानों का सरल घटाव आवश्यक नहीं है।

1

difftime() एक फ्लोटिंग पॉइंट डबल देता है, केवल उन्हें घटाना नहीं करता है जब तक कि आप उन्हें पहले डबल करने के लिए नहीं डालते।
स्रोत: here

+0

हां, लेकिन उन्हें घटाए जाने से पहले 'time_t' ऑपरेटरों को 'डबल' में परिवर्तित करने के लिए 'difftime' जैसी ही चीज़ करने की गारंटी नहीं है - यही कारण है कि 'भिन्नता' मौजूद है। मेरा जवाब देखें –

संबंधित मुद्दे