javascript गणित। नकारात्मक संख्याओं और गैर-पूर्णांक शक्तियों के साथ




floating-point ieee-754 (2)

आप एक सहायक फ़ंक्शन का उपयोग कर सकते हैं।

तेजी से मुझे इसी तरह की स्थिति का सामना करना पड़ा। यहां आपके लिए एक प्रस्तावित समाधान है

func checkSquareRoot(x: Double, y: Double) -> Double {
    let result = pow(x, y)

    if x > 0 {
        return result
    } else {
        return -1 * pow( -x, y)
    }
}

Math.pow लिए ECMAScript विनिर्देश निम्नलिखित Math.pow नियम है:

  • यदि x <0 और x परिमित है और y परिमित है और y पूर्णांक नहीं है, तो परिणाम नैन है

( http://es5.github.com/#x15.8.2.13 )

नतीजतन, Math.pow(-8, 1 / 3) -2 बजाए NaN देता है

इस नियम का कारण क्या है? क्या इस नियम के लिए कुछ प्रकार के व्यापक कंप्यूटर साइंस या आईईईईईश कारण हैं, या यह एक विकल्प टीसी39 / ईईच एक समय पर एक बार बनाया है?

अद्यतन करें

मेरे साथ अमदान के आदान-प्रदानों के लिए धन्यवाद, मुझे लगता है कि अब मैं तर्क समझता हूं। भावी पीढ़ी के लिए मैं हमारी चर्चा पर विस्तार करना चाहूंगा

चलो निम्नलिखित उदाहरण लें: Math.pow(823543, 1 / 7) पैदावार 6.999999999999999 हालांकि यह वास्तव में 7 होना चाहिए। यह इस तथ्य से शुरू की गई एक अशुद्धि है कि 0.14285714285714285 को पहले एक दशमलव प्रतिनिधित्व 0.14285714285714285 परिवर्तित किया जाना चाहिए, जो छोटा हो गया है और सटीक खो देता है। यह ऐसी कोई बुरी समस्या नहीं है जब हम सकारात्मक संख्याओं के साथ काम कर रहे हैं क्योंकि हम अभी भी परिणाम प्राप्त करते हैं जो वास्तविक परिणाम के बहुत करीब है।

हालांकि, एक बार जब हम नकारात्मक दुनिया में कदम उठाते हैं तो हमें एक समस्या है। यदि एक जावास्क्रिप्ट इंजन Math.pow(-823543, 1 / 7) गणना करने की कोशिश कर Math.pow(-823543, 1 / 7) तो उसे Math.pow(-823543, 0.14285714285714285) को दशमलव में Math.pow(-823543, 0.14285714285714285) होगा, इसलिए यह वास्तव में Math.pow(-823543, 0.14285714285714285) गणना करना होगा Math.pow(-823543, 0.14285714285714285) जो वास्तव में कोई वास्तविक उत्तर नहीं है इस मामले में, उसे NaN वापस करना पड़ सकता है क्योंकि उसे वास्तविक संख्या नहीं मिली, भले ही वास्तविक उत्तर -7 होना चाहिए। फर्थरमोर, जटिल संख्या की तलाश कर रहे हैं, जो "सबसे अच्छा अनुमान" बनाने के लिए वास्तविक संख्या के करीब हैं, इसमें जटिलता का एक स्तर शामिल हो सकता है, जिसे वे गणित क्षेत्र में जेएस इंजन की आवश्यकता नहीं करना चाहते थे।

मेरा अनुमान है कि यह अस्थायी बिंदु संख्याओं में परिशुद्धता के नुकसान के विचार के कारण है, जिससे उन्हें शासन पर ले जाया गया है कि एक गैर-पूर्णांक शक्ति को नकारात्मक संख्या हमेशा NaN होना चाहिए - मूलतः क्योंकि एक गैर-पूर्णांक शक्ति देने की संभावना है परिशुद्धता के नुकसान के परिणामस्वरूप एक जटिल संख्या, भले ही इसे न हो, और इसके ठीक होने का कोई अच्छा तरीका न हो।

इसके साथ, मैं काफी संतुष्ट हूं, लेकिन मैं आगे की जानकारी का स्वागत करता हूं।


मुझे लगता है क्योंकि उन परिस्थितियों के परिणाम जटिल जल में होते हैं, और ईसीएमएस्क्रिप्ट काल्पनिक संख्या से सुसज्जित नहीं है। विशेष रूप से, आपके उदाहरण का परिणाम अन्य परिणाम के बीच 1 + 1.732i करीब कुछ होना चाहिए। (तथ्य यह है कि -2 भी एक संभावित परिणाम बिंदु के अलावा है - यह एक नियम के बजाय एक दुर्घटना है।)





ecma262