मुझे एरे इंडेक्स की गणना के लिए CGFloat
int
पर फर्श या छत की आवश्यकता होती है।int से CGFloat को सुरक्षित रूप से फ़्लोर या छत कैसे करें?
समस्या जो मैं स्थायी रूप से floorf(theCGFloat)
या ceilf(theCGFloat)
के साथ देखता हूं वह यह है कि फ़्लोटिंग पॉइंट त्रुटियों के साथ समस्याएं हो सकती हैं।
तो क्या होगा यदि मेरा CGFloat
2.0f
है लेकिन आंतरिक रूप से इसे 1.999999999999f
या ऐसा कुछ माना जाता है। मैं floorf
करता हूं और 1.0f
प्राप्त करता हूं, जो फिर से एक फ्लोट है। और फिर भी मुझे इस जानवर को int में डालना होगा जो एक और समस्या पेश कर सकता है।
वहाँ एक सबसे अच्छा अभ्यास करने के लिए कैसे फर्श या प्लस्तर लगाना है एक float
के लिए एक int
ऐसी है कि 2.0
की तरह कुछ गलती 1
और 2.0
की तरह कुछ करने के लिए फिदा हो कभी नहीं होगा गलती से 2
को ceiled मिल कभी नहीं होगा?
इस प्रश्न का सही उत्तर नहीं किया जा सकता जब तक देखें विनिर्देशों इनपुट मूल्य में त्रुटि और क्या परिणाम मान जो भी कर रहे हैं लौटने के हैं का वर्णन प्रदान की जाती हैं उच्च या बहुत कम। ऐसे मूल्य को वापस करने के बीच ट्रेड-ऑफ हैं जो बहुत अधिक हैं क्योंकि पिछली राउंडिंग-त्रुटि ने मूल्य को बहुत अधिक बना दिया है और एक मान वापस कर दिया है जो बहुत कम है क्योंकि मान को कृत्रिम रूप से पिछली त्रुटि की क्षतिपूर्ति के लिए समायोजित किया गया था, और इसके विपरीत। संदर्भ के स्पष्टीकरण के बिना, कोई भी सही जवाब नहीं है। –