2012-07-28 2 views
9

में 32 बिट पूर्णांक को असाइन नहीं किया गया मैं जावास्क्रिप्ट में किसी बाहरी निर्भरता के बिना 32 बिट असीमित पूर्णांक का अनुकरण कैसे कर सकता हूं? x >>> 0 या x | 0 के साथ चालें काम नहीं करती हैं (गुणा के लिए, वे अतिरिक्त/घटाव के लिए काम करते हैं), और गुणा के दौरान युगल सटीकता खो देते हैं।जावास्क्रिप्ट

उदाहरण के लिए, 2654435769 * 340573321 (मॉड 2^32) गुणा करने का प्रयास करें। नतीजा होना चाहिए 1.

This answer गुणा है। अतिरिक्त/घटाव/विभाजन के बारे में क्या?

Here's a link वोल्फ्राम अल्फा में, उपरोक्त समीकरण प्रस्तुत करते हुए।

+0

लेकिन '2654435769 * 340573321' का परिणाम 32-बिट्स में फिट नहीं है ... –

+0

@ ime विदास: लेकिन मॉड 2^32 यह करता है; अगर मैं इसे सही ढंग से समझ रहा हूं तो वह कंप्यूटेशंस के साथ यही है। – pimvdb

+0

@pimvdb: हाँ, इस प्रकार 32 बिट हस्ताक्षरित पूर्णांक काम करते हैं - सभी परिचालनों को मॉड्यूल 2^32 किया जाता है। – user1367401

उत्तर

3

एक 32-बिट हस्ताक्षरित int जावास्क्रिप्ट के 64-bit float के भीतर फिट बैठता है - अतिरिक्त, घटाव या विभाजन करते समय सटीकता का कोई नुकसान नहीं होना चाहिए। 32-बिट पूर्णांक के भीतर रहने के लिए बस 0xffffffff के साथ मुखौटा करें। गुणा क्या फिट बैठता है, लेकिन आपके पास पहले से ही इसका समाधान है।

+0

हालांकि सटीकता गुणा के बाद पर्याप्त उच्च नहीं हो सकता है, क्योंकि 32-बिट पूर्णांक गुणा करने के लिए 64-बिट पूर्णांक प्राप्त हो सकता है, जबकि 64-बिट फ़्लोटिंग नंबर केवल 53 महत्वपूर्ण बिट्स का प्रतिनिधित्व कर सकता है। क्या कोई बेहतर तरीका है? –

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