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


118

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

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

उदाहरण:

var c = 55;

var d;  // d needs to set as 1

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

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

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


3
टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
शमूएल एलवाई

10
@SamuelLiew हालांकि बहुत सारी टिप्पणियां हैं, और उनमें से कुछ को हटा दिया जाना चाहिए ( चर्चा , टिप्पणी में जवाब ), उनमें से अधिकांश वास्तव में स्पष्टीकरण के लिए अनुरोध करते हैं ( उदाहरण के लिए )। टिप्पणियाँ पूछ रही है कि क्या यह एक XY समस्या है सीमा रेखा है।
user202729

ओरेकल साइबेल न्यूमेरिक ऑपरेटर्स, एक्सपोर्टर
डेरिक मोलर

2
@DerrickMoeller ऐसा लगता है कि सीबेल वीबी और सीबेल ईस्क्रिप्ट के बीच अंतर है। उत्तरार्द्ध में, यह एक बिटव्यू एक्सर है । मुझे यकीन नहीं है कि दोनों में से कौन यहां लागू होता है।
CRice

3
@ user202729 किसी भी पूरे टिप्पणी धागा एक बार बहुत लंबा हो जाता है, हम अलग-अलग टिप्पणियों का व्यक्तिगत रूप से इलाज करने के लिए नहीं जा रहे हैं, क्योंकि एसई व्यवस्थापक / देवों द्वारा बनाई गई मॉड इंटरफ़ेस हमारे डिफ़ॉल्ट कार्यों को "चैट करने के लिए कदम" या "सभी को हटा दें" पसंद करता है। यदि कोई टिप्पणी उपयोगी है, तो उसे स्वयं प्रश्न में संपादित किया जाना चाहिए या उत्तर के रूप में पोस्ट किया जाना चाहिए। यदि कोई टिप्पणी ऑफ-टॉपिक है, तो उन्हें स्व-संक्षिप्त / हटा दिया जाना चाहिए था। यदि आप इस आधुनिक "फ़ीचर" और / या "बहुत अधिक टिप्पणियां" ऑटो फ़्लैग मॉडरेटर्स पर चर्चा करना चाहते हैं, तो कृपया इसे Meta या Meta.SE पर चर्चा के लिए लाएँ। धन्यवाद।
शमूएल एलवाई

जवाबों:


149

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


1
ओपी के साथ 0 और 1 को गुणा करने की कोशिश कर रहा है other parts of the expression, और c / (c + 5e-324) * some_expressionआप काम नहीं करेंगे , क्योंकि आप पहली बार बूल में अभिव्यक्ति को बदलने की जरूरत है
phuclv

28
एक बग को लिया और इसे वहां की एक विशेषता में बदल दिया
चिराग भाटिया - चिराग ६४

1
@Medinoc हाँ, लेकिन सवाल यह भी कहता है कि दशमलव बिंदु के बाद कभी भी 2 से अधिक अंक नहीं होंगे, और 324 2 से बहुत अधिक है।
जोसेफ सेबल-रिइनेट मोनिका

1
यह दिलचस्प है और यह ओपी के लिए काम कर सकता है, लेकिन टीम में काम करने पर मुझे इस तरह के कोड के आने से वास्तव में नफरत होगी। बहुत कम से कम, यह अच्छी तरह से प्रलेखित और परीक्षण किया जाना चाहिए।
एरिक डुमिनील

1
@JosephSible मुझे पता है, लेकिन अगर आप वास्तव में इसे इस तरह से लेते हैं, तो सबसे स्पष्ट उत्तर होना चाहिए Number(Boolean(n)), जो बिना ऑपरेटर का उपयोग करता है। मैंने यह नहीं कहा कि यह वह नहीं है जिसका जवाब ओपी देख रहा था, लेकिन यह ओपी द्वारा वर्णित प्रश्न का उत्तर नहीं है। शायद सवाल में सुधार करना चाहिए।
user5532169

216

अभिव्यक्ति का उपयोग करें 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 पर 0 रहता है। यह इस तथ्य का लाभ उठाता है कि जावास्क्रिप्ट, NaN^00 है।

डेमो:

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


45
TIL: Number.NaN ^ n === no_O (जहां nएक परिमित संख्या है)
zerkms

17
ऐसा लगता है कि जब बिटविंड ऑपरेंड के रूप में उपयोग किया जाता है, तो NaNइसे आसानी से शून्य में बदल दिया जाता है। देखें: गैर-संख्याओं पर बिटवाइज़ ऑपरेशन
क्राइस ऑक्ट

3
@zerkms हो सकता है कि ~~NaN === 0और अधिक प्राकृतिक लगता है
Bergi

8
@EnricoBorba यह घातांक (जो उपयोग करता है **) नहीं है, यह एक बिटवाइज़ XOR है। जावास्क्रिप्ट में बिटवाइज़ ऑपरेशंस की बहुत कम पूर्ववर्तीता होती है इसलिए विभाजन पहले होगा।
CRC

3
^बिटवॉयर एक्सोर ऑपरेटर है। मुझे संदेह है कि अगर ^ओपी में बिटवॉर xor है जब अन्य सभी ऑपरेटर अंकगणित ऑपरेटर हैं। यह संभवतः प्रतिपादक ऑपरेटर ( **जावास्क्रिप्ट में) है।
सलमान ए

17

(((c/c)^c) - c) * (((c/c)^c) - c) हमेशा नकारात्मक और सकारात्मक के लिए 1 और 0 के लिए 0 लौटाएगा।

यह निश्चित रूप से चुने हुए उत्तर और लंबे समय से अधिक भ्रमित है। हालाँकि, मुझे ऐसा लगता है कि यह कम हैकनी है और स्थिरांक पर निर्भर नहीं है।

संपादित करें: @JosephSible उल्लेख के रूप में, मेरा और @ CRice के संस्करण का एक और अधिक कॉम्पैक्ट संस्करण, जो कि शिशुओं का उपयोग नहीं करता है:

c/c^c-c

CRice का उत्तर नहीं चुना गया था, जोसेफ सेबल था। सभी ईमानदारी में मैंने पोस्ट करने तक CRice के जवाब को नोटिस नहीं किया।
काइल वार्डल

2
यह किसी भी स्थिरांक का उपयोग नहीं करता है, केवल ऑपरेटर और दिए गए चर।
L3viathan

2
@ जोसेफिबल c/c^(c-c)सिर्फ हैc
बार्न्स

2
@JosephSible मैं एक्सपोज़र के ^रूप में पढ़ रहा था जैसा कि ओपी द्वारा निहित है "गुणा, भाग, घटाना, जोड़, और घातांक (*, /, -, +, ^ )"। यदि ^XOR अपने जावास्क्रिप्ट पूर्वता के साथ है तो मैं गलत हूं। मैंने ओपी से स्पष्टीकरण मांगा।
तवीयन बार्न्स

2
@TavianBarnes कि ओपी ने ऐसा नहीं लिखा है; किसी ने प्रश्न संपादित किया। मैंने इसे ओपी के वास्तव में पूछने के तरीके से बहाल किया।
जोसेफ सिबल-पुनः स्थापित मोनिका

2

एक बहुत ही जटिल जवाब है, लेकिन एक जो सीमित परिशुद्धता पर निर्भर नहीं करता है: यदि आप लेते हैं x^(2**n), तो यह हमेशा x+2**nx के शून्य होने के बराबर होगा, लेकिन यह बराबर होगा x-2**nयदि x का कोई दूसरा स्थान है। इस प्रकार, 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काम करता है।


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