16331239353195370.0 এর কি বিশেষ তাত্পর্য রয়েছে?


88

ব্যবহার করে import numpy as npআমি লক্ষ্য করেছি যে

np.tan(np.pi/2)

শিরোনামে নম্বর দেয় এবং না np.inf

16331239353195370.0

আমি এই নম্বর সম্পর্কে কৌতূহলী। এটি কোনও সিস্টেম মেশিনের নির্ভুলতা পরামিতির সাথে সম্পর্কিত? আমি কি কিছু থেকে এটি গণনা করতে পারি? (আমি অনুরূপ কিছু লাইন ধরে চিন্তা করছি sys.float_info)

সম্পাদনা: একই ফলস্বরূপ অন্যান্য পরিবেশ যেমন জাভা, অক্টেস, মতল্যাবগুলিতে প্রকৃতই পুনরুত্পাদনযোগ্য ... প্রস্তাবিত ডুপ কেন তা ব্যাখ্যা করে না।



10
আমি উত্তরটি পছন্দ করি না - এটি পুরোপুরি হ্যান্ড-ওয়েভি, সত্য কারণটির ব্যাখ্যা দিচ্ছে না। "আচ্ছা, রেডিয়ানে ট্যান (পাই / 2) মূলত অসীম, তাই না?" যেমন ওপি এখানে আসতে বলেছি - - উত্তর কেন সম্পর্কে কিছু ব্যাখ্যা না নয় আসলে np.inf। তবে এটি কেন তা নয় কেবল তা ব্যাখ্যা করা সহজ নয়, তবে উত্তরটি কেন ঠিক দেখা গেছে তা ব্যাখ্যা করার জন্য - এবং তাই আমিও করেছি ;-)
টিম পিটারস

উত্তর:


119

piপাইথন ভাসমান (প্ল্যাটফর্ম সি এর doubleধরণের সমান) হিসাবে হুবহু উপস্থাপনযোগ্য নয় । নিকটতম প্রতিনিধিত্বমূলক আনুমানিক ব্যবহার করা হয়।

আমার বাক্সে ব্যবহারের সঠিক অনুমান এখানে (সম্ভবত আপনার বাক্সের মতোই):

>>> import math
>>> (math.pi / 2).as_integer_ratio()
(884279719003555, 562949953421312)

সেই অনুপাতের স্পর্শক খুঁজে পেতে, আমি এখন ডাব্লুএক্সম্যাক্সিমায় স্যুইচ করতে যাচ্ছি:

(%i1) fpprec: 32;
(%o1) 32
(%i2) tan(bfloat(884279719003555) / 562949953421312);
(%o2) 1.6331239353195369755967737041529b16

আপনি যা পেয়েছেন তাই মূলত অভিন্ন। pi/2ব্যবহৃত বাইনারি আনুমানিকতা গাণিতিক ("অসীম নির্ভুলতা") মানের চেয়ে কিছুটা কম pi/2। সুতরাং আপনি পরিবর্তে একটি খুব বড় স্পর্শক পেতে infinitytan()প্রকৃত ইনপুট জন্য গণনা করা উপযুক্ত!

ঠিক একই ধরণের কারণে, যেমন,

>>> math.sin(math.pi)
1.2246467991473532e-16

প্রত্যাবর্তন হয় না ০. প্রায় কাছাকাছি math.piতুলনায় একটু কম pi, এবং প্রদর্শিত ফলাফল যে সত্য দেওয়া সঠিক ।

গণিত দেখার অন্যান্য উপায় p

ব্যবহারের ক্ষেত্রে নির্ভুল আনুমানিকতা দেখার বিভিন্ন উপায় রয়েছে:

>>> import math
>>> math.pi.as_integer_ratio()
(884279719003555, 281474976710656)

math.pi সেই অনুপাতের গাণিতিক ("অসীম নির্ভুলতা") মানের ঠিক সমান equal

বা হেক্সস স্বরলিপিতে একটি সঠিক ভাসা হিসাবে:

>>> math.pi.hex()
'0x1.921fb54442d18p+1'

বা একরকমভাবে খুব সহজেই প্রত্যেকের দ্বারা বোঝা যায়:

>>> import decimal
>>> decimal.Decimal(math.pi)
Decimal('3.141592653589793115997963468544185161590576171875')

যদিও এটি তাত্ক্ষণিকভাবে সুস্পষ্ট নাও হতে পারে, প্রতিটি সসীম বাইনারি ফ্লোটটি সীমাবদ্ধ দশমিক ভাসমান হিসাবে ঠিক প্রতিনিধিত্বযোগ্য (বিপরীতটি সত্য নয় ; যেমন: দশমিক 0.1একটি সীমাবদ্ধ বাইনারি ভাসমান হিসাবে ঠিক প্রতিনিধিত্বযোগ্য নয়), এবং Decimal(some_float)নির্মাতা সঠিক সমতুল্য উত্পাদন করে।

এখানে piযথাযথ দশমিক মান অনুসরণ করার যথাযথ মান math.piএবং তৃতীয় লাইনের একটি ক্যারেট যেখানে তারা পৃথক পৃথক অঙ্কের দিকে নির্দেশ করে:

true    3.14159265358979323846264338327950288419716939937510...
math.pi 3.141592653589793115997963468544185161590576171875
                         ^

math.piএখন "প্রায় সব" বাক্স জুড়েই সমান, কারণ প্রায় সব বাক্সেই এখন একই বাইনারি ফ্লোটিং-পয়েন্ট ফর্ম্যাট (আইইইই 754 ডাবল স্পষ্টতা) ব্যবহার করে। আপনি আপনার বাক্সে এটি নিশ্চিত করতে উপরের যে কোনও উপায় ব্যবহার করতে পারেন বা আপনার বাক্সটি যদি ব্যতিক্রম হয় তবে সঠিকভাবে সুনির্দিষ্ট সন্ধান করতে পারেন।


@ টিম পিটারস - এটি পুরোপুরি পরিষ্কার। সম্পূর্ণতার জন্য আমি অনুমান করছি যে np.piএটির উপস্থাপনাটি সিস্টেমের এপসিলনের মধ্যে সবচেয়ে কাছের যৌক্তিক উপস্থাপনা?
আগু

4
ধরে np.piনেওয়া পাইথনের সমান মান রয়েছে math.pi(আমি পরীক্ষা করিনি, তবে আপনি ;-) করতে পারেন), এটি প্ল্যাটফর্মের নেটিভ C doubleফ্লোটিং-পয়েন্ট ফর্ম্যাটে প্রতিনিধিত্বযোগ্য গাণিতিক পাইয়ের নিকটতম মান । যার অর্থ এখন প্রায় সকল বাক্সে আইইইই 754 ডাবল-স্পষ্টতা, এবং তাই 53 বিট (ম্যান্টিসা) যথার্থতার সাথে নিকটতম বাইনারি ভাসমান। সুতরাং যুক্তিগুলির সেটটি সেই ফর্মের মধ্যে সীমাবদ্ধ +/- I * 2**Jযেখানে পূর্ণসংখ্যা I0 বা 2**52 <= I < 2**53, এবং পূর্ণসংখ্যার পরিসীমা Jএই আকারের সমস্ত যুক্তিগুলি যে কোনও জায়গায় কাছে coverাকতে যথেষ্ট বিস্তৃত pi
টিম পিটারস

4
আর এই কারণেই আমি চাই ভালবাসেন যদি "বাইনারি" ত্রিকোণমিতিক ফাংশন আরো সাধারণভাবে বাস্তবায়িত হয়েছে। যেহেতু পাইকে কখনই যুক্তিবাদী হিসাবে উপস্থাপন করা যায় না, তাই 0 থেকে 1 পর্যন্ত কোণগুলিতে ক্রিয়াকলাপগুলির একটি সেট সহ কার্যকর হবে
পাইপ

ওয়েল, তারা আমদানি করে np.pi, না math.pi
ইকনস

4
@ Έρικ Κωνσταντόπουλος math.pi, np.piএবং scipy.piসমস্ত একই; নামকরণ সুবিধার জন্য এগুলি সদৃশ; stackoverflow.com/questions/12645547/…
টিম পিটারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.