ऑब्जेक्टिव-सी / कोको टच में मोडुलो ऑपरेशन कैसे करें?


82

मेरे पास दो CGFloat मान हैं, और modulo परिणाम की गणना करना चाहते हैं। या दूसरे शब्दों में: मैं जानना चाहता हूं कि अगर वैल्यू को जितना संभव हो उतना वैल्यूबी में रखा जाए तो क्या बचा है।

तो मैंने अभी कोशिश की:

CGFloat moduloResult = valueB % valueA;

संकलक% के बारे में शिकायत करता है और मुझे बताता है: "अमान्य ऑपरेंड्स टू बाइनरी%"। कोई उपाय?

जवाबों:


204

% के लिए है intया longनहीं, floatया double।

आप इसके बजाय से fmod()या उपयोग कर सकते हैं ।fmodf()<math.h>

जैसा <tgmath.h>कि CGFloat के आविष्कारक ने सुझाव दिया है ।


2
tgmath.h iphone पर उपलब्ध है? मुझे आश्चर्य है क्योंकि मुझे कभी गणित को शामिल नहीं करना पड़ा। यह नींव के ढांचे के साथ आता है, मुझे लगता है।

इसके अलावा tgmath.h और math.h के बीच क्या अंतर है?
— 14:49 पर user4951

4
जिम: tgmath.h"टाइप जेनेरिक" (इसलिए "टीजी") है और इस तरह यह तय करेगा कि math.hआपके इनपुट के प्रकार को किस फ़ंक्शन को कॉल करना है। (उदाहरण के लिए, शामिल के floor(x)साथ tgmath.hकॉल करना कॉल करेगा ( अगर math.h) एक है , अगर एक है , या यदि एक है ।)floorf(x)xfloatfloor(x)xdoublefloorl(x)xlong double
— जॉर्ज डब्ल्यूएस

10

अगर मुझे सही ढंग से याद है कि modulo को इसके इनपुट के रूप में 2 ints की आवश्यकता है तो आपको कुछ इस तरह की आवश्यकता होगी:

CGFloat moduloResult = (float)((int)valueB % (int)valueA);

मान लें कि मान और मान दोनों फ़्लोट हैं


3
यह, निश्चित रूप से, आपको सही उत्तर नहीं देगा, क्योंकि गोलाई के कारण।
— फिशरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.