2014-09-16 6 views
7

की ओर गोल नकारात्मक पूर्णांक मात्रात्मक यह प्रतीत होता है कि निचले नंबर की ओर स्विफ्ट दौर में पूर्णांक विभाजन शून्य की ओर शून्य है। इसका मतलब है, उदाहरण के लिए, -1/2 -1 के बजाय 0 होगा।नकारात्मक अनंतता

क्या स्विफ्ट को निचले नंबर की ओर घूमने का कोई तरीका है? मुझे पता है कि मैं इसे कैसे "अनुकरण" कर सकता हूं, लेकिन यदि कोई मूल समाधान है, तो मैं इसका उपयोग करूंगा।

उत्तर

0

फर्श फ़ंक्शन नीचे घूमता है ताकि यदि आप floor(Float(a)/Float(b)) करते हैं तो इसे काम करना चाहिए। ताकि आप उस बेतुका अभिव्यक्ति टाइप करने के लिए की जरूरत नहीं है कि

infix operator </> { associativity left } 
func </> (a: Int, b: Int) -> Int { 
    return Int(floor(Double(a)/Double(b))) 
} 

:

+1

वह 'इंट (मंजिल (फ्लोट (ए)/फ्लोट (बी)) होगा, हालांकि,। निश्चित रूप से दिल की बेहोशी के लिए नहीं। – zneak

1

आप इस तरह अपने खुद के ऑपरेटर परिभाषित कर सकते हैं। मैं </> का प्रस्ताव दे रहा हूं, लेकिन निश्चित रूप से आप अपना खुद का चयन कर सकते हैं।

आप ऑपरेटरों बनाने पसंद नहीं है, तो यह एक सामान्य समारोह के रूप में उपयोग करें:

func div (a: Int, b: Int) -> Int { 
    return Int(floor(Double(a)/Double(b))) 
} 

अंतिम, लेकिन व्यक्तिगत रूप से मैं नहीं यह प्रयोग करेंगे, तो आप को फिर से परिभाषित कर सकते हैं विभाजन ऑपरेटर:

func/(a: Int, b: Int) -> Int { 
    return Int(floor(Double(a)/Double(b))) 
} 

और यह मामला यह सब डिवीजनों के लिए लागू किया जाएगा में - साइड इफेक्ट के बारे में पता होना हालांकि

0

मेरे बैकअप समाधान में एक नया ऑपरेटर -/ शामिल है। गणित में युगल और पूर्णांक के बीच आगे और पीछे झुकाव शामिल नहीं है, जो बहुत बड़ी संख्या के साथ कुछ किनारे के मामलों से बचाता है। दूसरी तरफ, यह denominator और numerator दोनों बहुत बड़ी नकारात्मक संख्याएं हैं, और मुझे यकीन नहीं है कि denominator नकारात्मक होने पर क्या होता है, तो यह ओवरफ़्लो हो सकता है।

infix operator -/ { 
    precedence 150 
    associativity left 
} 

func -/ (numerator: Int, denominator: Int) -> Int { 
    if numerator < 0 { 
     return (numerator - (denominator - 1))/denominator 
    } 
    return numerator/denominator 
} 

स्विफ्ट के मामले शायद मुद्दों के अपने हिस्से के साथ खत्म हो जाएगा में लिखा अगर आप सी व्यवहार का अनुकरण करना चाहते हैं किसी भी समाधान। एक अन्य संभावना ब्रिजिंग हेडर में एक छोटे से divide फ़ंक्शन को शामिल करना और ऑपरेटर को इसके साथ कार्यान्वित करना होगा।

संबंधित मुद्दे