পাইথনে আমি বর্গমূলের গণনা করব কীভাবে?


140

পাইথন কেন "ভুল" উত্তর দেয়?

x = 16

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

হ্যাঁ, আমি জানি import mathএবং ব্যবহার করি sqrt। তবে আমি উপরের উত্তরটি খুঁজছি।


31
পাইথন 3 এ এটি ব্যবহার করে দেখুন, এটি স্থির;)
মার্ক রান্সম

2
পাইথন দিয়ে স্কোয়ার রুট গণনা করুন import mathএবং তারপরে x = math.sqrt(25)যা মানটিকে 5.0x এর সাথে নির্ধারণ করবে ।
এরিক লেসচিনস্কি

1
@ মেরলিন - দয়া করে শিরোনামে পরিবর্তনগুলি রোল করবেন না। এটি প্রশ্নটি সহজ করে তোলে।
ChrisF

2
@ ক্রিসএফ - এটি আমার প্রশ্ন, মাল্টিপল ইস্যুগুলিকে সম্বোধন করে। শিরোনাম এবং সামগ্রী পরিবর্তন বন্ধ করুন।
মার্লিন

উত্তর:


246

sqrt=x**(1/2)পূর্ণসংখ্যা বিভাগ করছে। 1/2 == 0

সুতরাং আপনি প্রথম উদাহরণে x (1/2) , দ্বিতীয়টিতে x (0) গণনা করছেন ।

সুতরাং এটি ভুল নয়, এটি একটি ভিন্ন প্রশ্নের সঠিক উত্তর।


64
"সুতরাং এটি ভুল নয়, এটি একটি ভিন্ন প্রশ্নের সঠিক উত্তর" - এটি ভালবাসুন! - এই শব্দটিকে আরও বেশিবার ব্যবহার করার জন্য আমি নিজেকে চ্যালেঞ্জ জানাতে পারি!
টমাস কিম্বার

6
পাইথন ৩.6-এ আপনি প্রথম যে প্রশ্নটি করেছিলেন সেটির সঠিক উত্তর পাবেন।
vwvan

2
দ্বিতীয় পদ্ধতিটি গণনা করা যেতে পারে:sqrt = x**(float(1)/2)
ভিএম_এআইপি

117

আপনাকে লিখতে হবে: sqrt = x**(1/2.0)অন্যথায় একটি পূর্ণসংখ্যা বিভাগ সম্পাদিত হয় এবং এক্সপ্রেশন 1/2ফিরে আসে 0

পাইথন ২.x এ আচরণটি "স্বাভাবিক", যেখানে পাইথন ৩.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 )

এটি উত্তর শৃঙ্খলে একটি তুচ্ছ সংযোজন। তবে যেহেতু সাবজেক্টটি খুব সাধারণ গুগল হিট তাই এটি যুক্ত করার উপযুক্ত, আমি বিশ্বাস করি।


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 মানটি পাস করতে পারেন এবং অন্য একটি নতুন_সেসিটটি গণনা করতে পারেন যা আগেরটির তুলনায় আরও নির্ভুল বা আপনি এটির মতো পুনরাবৃত্ত ফাংশন সংজ্ঞা তৈরি করতে পারেন।

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 each প্রতিটি পুনরাবৃত্ত কলগুলির ফলাফল:

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) 

দয়া করে সম্পাদনা করুন এবং এটি কেন কাজ করে তার একটি সংক্ষিপ্ত বিবরণ যুক্ত করুন। শুধু কোডটি খুব সহায়ক নয়।
wjandrea
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.