javascript - क्या गैर-शून्य संख्या को 1 में बदलने के लिए गणितीय ऑपरेटरों*,/,+,-, ^ का उपयोग किया जा सकता है?




siebel (3)

मैं सॉफ्टवेयर (ओरेकल साइबेल) के साथ काम कर रहा हूं जो केवल ऑपरेटर्स के साथ जावास्क्रिप्ट एक्सप्रेशन को कई गुना, डिवाइड, घटाना, ऐड, और XOR ( * , / , - , + , ^ ) के साथ सपोर्ट करता है। मेरे पास अन्य ऑपरेटर नहीं हैं जैसे कि ! या ? : ? : उपलब्ध है।

उपरोक्त ऑपरेटरों का उपयोग करना, क्या गैर-शून्य होने पर नंबर को 1 में बदलना संभव है और यदि यह पहले से ही शून्य है तो इसे 0 पर छोड़ दें? संख्या सकारात्मक, शून्य या नकारात्मक हो सकती है।

उदाहरण:

var c = 55;

var d;  // d needs to set as 1

मैंने c / c की कोशिश की, लेकिन यह NaN मूल्यांकन करता है जब c 0. 0. d होना आवश्यक है जब c 0 होता है।

c एक मुद्रा मूल्य है, और इसमें अधिकतम दो अनुगामी अंक और 12 अग्रणी अंक होंगे।

मैं एक संख्या को एक बूलियन 0 या 1 में परिवर्तित करके, और फिर अभिव्यक्ति के अन्य भागों को गुणा करके, if शर्त का अनुकरण करने की कोशिश कर रहा हूं।


अभिव्यक्ति n/n^0 उपयोग करें।

यदि n शून्य नहीं है:

 Step    Explanation
------- -------------------------------------------------------------------------------
 n/n^0   Original expression.
 1^0     Any number divided by itself equals 1. Therefore n/n becomes 1.
 1       1 xor 0 equals 1.

यदि n शून्य है:

 Step    Explanation
------- -------------------------------------------------------------------------------
 n/n^0   Original expression.
 0/0^0   Since n is 0, n/n is 0/0.
 NaN^0   Zero divided by zero is mathematically undefined. Therefore 0/0 becomes NaN.
 0^0     In JavaScript, before any bitwise operation occurs, both operands are normalized.
         This means NaN becomes 0.
 0       0 xor 0 equals 0.

जैसा कि आप देख सकते हैं, सभी गैर-शून्य मान 1 में परिवर्तित हो जाते हैं, और 0 पर रहता है। यह इस तथ्य का लाभ उठाता है कि जावास्क्रिप्ट में, NaN^0 0 है।

डेमो:

[0, 1, 19575, -1].forEach(n => console.log(`${n} becomes ${n/n^0}.`))


एक बहुत ही जटिल उत्तर, लेकिन एक जो सीमित परिशुद्धता पर निर्भर नहीं करता है: यदि आप x^(2**n) लेते हैं, तो यह हमेशा x+2**n बराबर होगा यदि x शून्य है, लेकिन यह बराबर होगा x-2**n यदि x का nth स्थान पर कोई है। इस प्रकार, x = 0 के लिए, (x^(2**n)-x+2**n)/(2**(n+1) हमेशा 1 होगा, लेकिन यह कभी-कभी x के लिए शून्य होगा! = 0 तो अगर आप (x^(2**n)-x+2**n)/(2**(n+1) सभी n से अधिक लेते हैं, तो XOR कि 1 के साथ, आप अपना वांछित प्राप्त करेंगे। फ़ंक्शन। आपको मैन्युअल रूप से प्रत्येक कारक को कोड करना होगा, और यदि आप फ़्लोटिंग पॉइंट का उपयोग कर रहे हैं, तो आपको इसे संशोधित करना होगा।

यदि आपके पास == ऑपरेटर है, तो (x==0)^1 कार्य करता है।


c / (c + 5e-324) को काम करना चाहिए। (निरंतर 5e-324 नंबर है। Number.MIN_VALUE , सबसे छोटा अभ्यावेदन पॉजिटिव नंबर है।) यदि x 0 है, तो यह ठीक 0 है, और यदि x nonzero है (तकनीकी रूप से, यदि x कम से कम 4.450147701401440252e-308 है, जो सबसे छोटा है -प्रश्न में 0.01 नंबर की अनुमति है, है), जावास्क्रिप्ट का फ्लोटिंग-पॉइंट गणित 1 से भिन्न होने के उत्तर के लिए बहुत अभेद्य है, इसलिए यह बिल्कुल 1 के रूप में सामने आएगा।





siebel