मैं थोड़ा सी/सी ++ अनुभव (और शून्य प्रशिक्षण) के साथ एक उद्देश्य-सी डेवलपर हूं, और मुझे हार्ड कोडित संख्यात्मक मानों के साथ आज कुछ अजीब सामना करना पड़ा।इंटेल टू डबल कास्टिंग इश्यू
मुझे यकीन है कि यह एक सरल/बेवकूफ सवाल है, लेकिन किसी को कर सकते हैं कृपया बताएं कि इस काम करता हूँ:
NSDate *start = [NSDate date];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"seconds: %f", [start timeIntervalSinceNow]);
});
// output: seconds: -1.0001
और यह भी काम करता है (सेकंड का ध्यान नंबर बदल गया है):
NSDate *start = [NSDate date];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"seconds: %f", [start timeIntervalSinceNow]);
});
// output: seconds: -2.0001
लेकिन यह तुरंत क्रियान्वित किया जाता है:
NSDate *start = [NSDate date];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 4 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"seconds: %f", [start timeIntervalSinceNow]);
});
// output: seconds: -0.0001
हालांकि, बजाय 4.0
का उपयोग कर 4
फिक्स इसके बारे में:
NSDate *start = [NSDate date];
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 4.0 * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"seconds: %f", [start timeIntervalSinceNow]);
});
// output: seconds: -4.0001
क्यों 1 और 2 ठीक से प्रासंगिक डबल मूल्य पर कास्ट करते हैं, लेकिन बड़ा संख्या (मैं 3 का परीक्षण किया और 4) 0
के रूप में प्रतिनिधित्व होना दिखाई देते हैं?
मैं Xcode 4.2 के साथ संकलन कर रहा हूँ, LLVM 3.0 उपयोग करने के लिए कॉन्फ़िगर किया गया।
संपादित करें:
dispatch_time_t के रूप में परिभाषित किया गया है:
typedef uint64_t dispatch_time_t;
और dispatch_time है:
dispatch_time_t dispatch_time(dispatch_time_t when, int64_t delta);
और NSEC_PER_SEC है:
#define NSEC_PER_SEC 1000000000 /* nanoseconds per second */
dispatch_time के पैरामीटर क्या है? – Pubby
धन्यवाद @ पब्बी, मैंने सवाल अपडेट किया है। –
जो बहुत अजीब लगता है कि 1,2 काम और 3,4 नहीं ... मैं इसे दोबारा जांचूंगा, लेकिन आप निश्चित रूप से उन उदाहरणों को देखते हैं जहां स्याही 0 एफ का मूल्यांकन करेंगे। –