मैं इसे बिल्कुल समझ नहीं सकता। यहां क्या समस्या है?XCTestCase में CGFloat की तुलना कैसे करें?
मैंने 1.0
, 1.0f
, (CGFloat) 1.0
और (CGFloat)(2.0 - 1.0)
टाइप करने का प्रयास किया है। हर बार एक ही त्रुटि।
मैं इसे बिल्कुल समझ नहीं सकता। यहां क्या समस्या है?XCTestCase में CGFloat की तुलना कैसे करें?
मैंने 1.0
, 1.0f
, (CGFloat) 1.0
और (CGFloat)(2.0 - 1.0)
टाइप करने का प्रयास किया है। हर बार एक ही त्रुटि।
मैं इसके लिए FLT_EPSILON
का उपयोग कर की सिफारिश करेंगे:
XCTAssertEqualWithAccuracy(mov.lastDelta, 0.0f, FLT_EPSILON, @"");
जब तक आप एक बड़ा एप्सिलॉन की आवश्यकता के लिए कुछ कारण है।
मैं
mov.value = 8.9
XCTAssertEqualWithAccuracy(mov.lastDelta, 0.0f, 0.001, @"");
को बदल दिया है और अब यह ठीक काम करने के लिए ...
अपने नंबर, 0.9 का आंशिक हिस्सा है, एक नाव से सही रूप में नहीं दर्शाया जा सकता लगता है । कुछ गोलियां घटित होंगी, और शायद यह असफल होने का कारण है।
0.9 = (1/2) + (1/4) + (1/8) + (1/64) + (1/128) + (1/1024) + (1/2048) + (1/16384) + (1/32768) + (1/262144) इत्यादि = 0,8 99 9978005 आदि
मानव आंखों के चारों ओर देखने वाले फ्रैक्शंस बाइनरी सिस्टम में गोल नहीं हो सकते हैं।
0.5 cpu = (1/2) के लिए एक गोल संख्या है।
0.75 cpu = (1/2) + (1/4) के लिए गोल है।
भी 0,9072265625 है दौर ((1/2) + (1/4) + (1/8) + (1/32) + (1/1024))
लेकिन नहीं 0.9 या 0.1 । यहां तक कि 0.2 :)
संपादित करें: और, ज़ाहिर है, फ्लोट की तुलना करने के लिए एक ईपीएसलॉन का उपयोग करें।