मैं पायथन में वर्गमूल की गणना कैसे करूं?


140

अजगर "गलत" जवाब क्यों देता है?

x = 16

sqrt = x**(.5)  #returns 4
sqrt = x**(1/2) #returns 1

हां, मैं जानता हूं import mathऔर उपयोग करता हूं sqrt। लेकिन मैं ऊपर के जवाब की तलाश में हूं।


31
इसे पायथन 3 में आज़माएं, यह तय हो गया है;)
मार्क रैनसम

2
अजगर के साथ एक वर्गमूल की गणना करें import mathऔर फिर x x = math.sqrt(25)को मान प्रदान करेगा 5.0
बजे एरिक लेसचिंस्की

1
@ मर्लिन - कृपया शीर्षक में परिवर्तन वापस न करें। यह प्रश्न को खोजना आसान बनाता है।
ChrisF

2
@ChrisF - इसका मेरा प्रश्न, मुल्तानी मुद्दों को स्वीकार करता है। शीर्षक और सामग्री बदलना बंद करें।
मर्लिन

जवाबों:


246

sqrt=x**(1/2)पूर्णांक विभाजन कर रहा है। 1/2 == 0

इसलिए आप पहले उदाहरण में x (1/2) , दूसरे में x (0) की गणना कर रहे हैं ।

इसलिए यह गलत नहीं है, यह एक अलग सवाल का सही जवाब है।


64
"तो यह गलत नहीं है, यह एक अलग सवाल का सही जवाब है" - इसे प्यार करो! - मुझे लगता है कि मैं इस वाक्यांश का अधिक बार उपयोग करने के लिए खुद को चुनौती दे सकता हूं!
थॉमस किम्बर

6
Python 3.6 में आपको आपके द्वारा पूछे गए सवाल का सही उत्तर मिलता है।
vwvan

2
दूसरी विधि के रूप में गणना की जा सकती है:sqrt = x**(float(1)/2)
VM_AI

117

आपको लिखना होगा: sqrt = x**(1/2.0)अन्यथा एक पूर्णांक विभाजन किया जाता है और अभिव्यक्ति 1/2वापस आती है 0

यह व्यवहार पायथन 2.x में "सामान्य" है, जबकि पायथन 3.x में 1/2मूल्यांकन करता है 0.5। यदि आप चाहते हैं कि आपका पायथन 2.x कोड 3.x wrt डिवीजन की तरह व्यवहार करे from __future__ import division- तो उसका 1/2मूल्यांकन करेगा 0.5और पीछे की संगतता के लिए, 1//2उसका मूल्यांकन करेगा 0

और रिकॉर्ड के लिए, एक वर्गमूल की गणना करने का पसंदीदा तरीका यह है:

import math
math.sqrt(x)

23
import math
math.sqrt( x )

यह उत्तर श्रृंखला के लिए एक तुच्छ जोड़ है। हालाँकि जब से Subject बहुत ही सामान्य Google हिट है, यह जोड़ने योग्य है, मुझे विश्वास है।


11

/ पायथन 2 में पूर्णांक विभाजन करता है:

>>> 1/2
0

यदि संख्याओं में से एक फ्लोट है, तो यह अपेक्षित रूप से काम करता है:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0

7

आप जो देख रहे हैं वह पूर्णांक विभाजन है। डिफ़ॉल्ट रूप से फ्लोटिंग पॉइंट डिवीजन प्राप्त करने के लिए,

from __future__ import division

या, आप 1/2 के 1 या 2 को फ्लोटिंग पॉइंट वैल्यू में बदल सकते हैं।

sqrt = x**(1.0/2)

2

इसका उत्तर देने में थोड़ी देर हो सकती है लेकिन वर्गमूल की गणना करने का सबसे सरल और सटीक तरीका न्यूटन की विधि है।

आपके पास एक संख्या है जिसे आप इसके वर्गमूल की गणना करना चाहते हैं (num)और आपको इसके वर्गमूल का अनुमान है (estimate)। अनुमान किसी भी संख्या में 0 से बड़ा हो सकता है, लेकिन एक संख्या जो समझ में आता है पुनरावर्ती कॉल गहराई को काफी कम कर देता है।

new_estimate = (estimate + num / estimate) / 2

यह रेखा उन 2 मापदंडों के साथ अधिक सटीक अनुमान की गणना करती है। आप फ़ंक्शन में new_estimate मान पास कर सकते हैं और एक और new_estimate की गणना कर सकते हैं जो पिछले एक की तुलना में अधिक सटीक है या आप इस तरह एक पुनरावर्ती फ़ंक्शन परिभाषा बना सकते हैं।

def newtons_method(num, estimate):
    # Computing a new_estimate
    new_estimate = (estimate + num / estimate) / 2
    print(new_estimate)
    # Base Case: Comparing our estimate with built-in functions value
    if new_estimate == math.sqrt(num):
        return True
    else:
        return newtons_method(num, new_estimate)

उदाहरण के लिए हमें 30 के वर्गमूल को खोजने की आवश्यकता है। हम जानते हैं कि परिणाम 5 और 6 के बीच है।

newtons_method(30,5)

संख्या 30 है और अनुमान है 5. प्रत्येक पुनरावर्ती कॉल से परिणाम हैं:

5.5
5.477272727272727
5.4772255752546215
5.477225575051661

अंतिम परिणाम संख्या के वर्गमूल का सबसे सटीक गणना है। यह बिल्ट-इन फ़ंक्शन math.sqrt () के समान ही है।


1

शायद याद रखने का एक सरल तरीका: अंश (या हर) के बाद एक बिंदु जोड़ें

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3

0

आप सरणियों के वर्गमूलों की गणना करने के लिए NumPy का उपयोग कर सकते हैं:

 import numpy as np
 np.sqrt([1, 4, 9])

1
चौकोर जड़ों को करने का यह एक अधिक स्वाभाविक तरीका है, लेकिन यह प्रश्न का उत्तर कैसे देता है (वास्तव में यह शीर्षक में प्रश्न का उत्तर देता है, लेकिन शरीर में वास्तविक प्रश्न नहीं है (हाँ, यह एक बुरा शीर्षक है))?
पीटर मोर्टेंसन

-1

मुझे उम्मीद है कि नीचे उल्लिखित कोड आपके प्रश्न का उत्तर देगा।

def root(x,a):
    y = 1 / a
    y = float(y)
    print y
    z = x ** y
    print z

base = input("Please input the base value:")
power = float(input("Please input the root value:"))


root(base,power) 

कृपया संपादित करें और यह क्यों काम करता है की एक संक्षिप्त विवरण जोड़ें। बस कोड बहुत उपयोगी नहीं है।
वेजेंड्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.