मैं एक स्ट्रिंग है कि मैं एक डबल में बदलने का इस तरह है:"-Weverything" उपज "== साथ चल बिन्दु या = असुरक्षित है की तुलना करना!"
double d = [string doubleValue];
doubleValue
के लिए दस्तावेज़ कि अतिप्रवाह पर बताता है , यह विधि या तो HUGE_VAL
या -HUGE_VAL
देता है। इस तरह मैं के लिए जाँच की है इस:
if (d == HUGE_VAL || d == -HUGE_VAL)
//overflow
अब, नई जोड़ने के बाद से "-Weverything" झंडा चेतावनी, संकलक अब शिकायत है कि
Comparing floating point with == or != is unsafe
मैं कैसे इस समस्या को हल कर सकते हैं? कैसे मुझे यह तुलना करनी चाहिए?
मैं भी दो "सामान्य" चल बिन्दु संख्या (अर्थात नहीं "HUGE_VAL" वाले) की तुलना के बारे में एक ही सवाल है। उदाहरण के लिए,
double a, b;
//...
if (a != b) //this will now yield the same warning
//...
इसे कैसे हल किया जाना चाहिए?
समझ में आता है। दूसरी ओर, यह कुछ तरीकों से इस बारे में चेतावनी देने के लिए भी समझ में आता है। क्या संकलक को अधिक स्पष्ट रूप से बताने का कोई तरीका है कि: "हां, मुझे पूरा यकीन है कि मैं इन फ्लोट्स की तुलना एक दूसरे के बराबर होने के समान कर रहा हूं, और मुझे चेतावनी न दें।" ? तो ऐसे मामलों में जहां मुझे यकीन है, चेतावनी प्रकट नहीं होगी। अन्य मामलों में, मैं ईपीएसलॉन परीक्षण करता हूं। – NoobOverflow
@NoobOverflow यदि आप वास्तव में संकलक को खुश करना चाहते हैं, तो जांच करें कि 'd> = HUGE_VAL || डी <= -HUGE_VAL'। यह '==' का उपयोग किए बिना एक ही चीज़ की गणना करता है। लेकिन मैं चेतावनी का उपयोग नहीं करने की सलाह देते हैं। –
@NoobOverflow असल में, मेरी पिछली सिफारिश कोड को कम पठनीय बनाता है, लेकिन यदि उद्देश्य-सी में 'is_infinity' फ़ंक्शन है, तो इसका उपयोग कोड ** अधिक ** पठनीय होगा। फ़ंक्शन का विनिर्देश यह होना चाहिए कि यह दो मानों 'HUGE_VAL' और '-HUGE_VAL' के लिए बिल्कुल सही है, और मैं अनुशंसा करता हूं कि आप इसका उपयोग केवल उसी के लिए करें। –