तो, कल कोडिंग अभ्यास के हिस्से के रूप में कुछ एफ # कोड के माध्यम से काम करते समय, एक और डेवलपर ने कुछ दिलचस्प बताया। हम एक सूची को संक्षेप में दिखाने के लिए कोड का एक त्वरित टुकड़ा कर रहे थे। अगर मैं कार्य करें:अंकगणित ओवरफ़्लो को फेंकने के लिए सूची कैसे कम करें
[1..100000] |> Seq.sum
मैं निम्नलिखित त्रुटि मिलती है:
System.OverflowException: Arithmetic operation resulted in an overflow.
at <StartupCode$FSI_0003>[email protected]()
Stopped due to error
हालांकि, अगर मैं ऐसा:
[1..100000] |> List.reduce (+)
मैं:
val it : int = 705082704
मैं हालांकि एहसास कोड के इन दो टुकड़ों को एक ही पी पूरा करना चाहिए मान लीजिए वे बहुत अलग हैं। मैं सिर्फ उत्सुक हूं कि सूची प्राप्त करने का कोई तरीका है। मुझे एक बुरा जवाब देने के बजाय ओवरफ्लो एक्सेप्शन फेंकने के लिए?
बस मौजूदा उत्तरों के लिए एक अतिरिक्त: '1..100000 = (100001 * 100000)/2 = 50000 की राशि 50000 = 0x12A06B550' जो एक अतिप्रवाह है। एक अतिप्रवाह बिट छोड़ना: '0x12A06B550 - 0x100000000 = 0x2A06B550 = 705082704'। – bytebuster