আমি কীভাবে পাই (3.14159) মুদ্রণ করব? [বন্ধ]


35

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


28
আপনার ভাষা বাছাই করুন: rosettacode.org/wiki/Pi
মার্ক

4
নোট করুন যে আপনি যদি ১৫ এর চেয়ে বেশি সংখ্যক চান তবে এটি আরও মজাদার হয়ে
উঠেছে

2
@ ডিসপ্লেনাম: এর অর্থ হল যে আপনি ডাবল নির্ভুলতা ভাসমান পয়েন্টের মানগুলি ব্যবহার করে যা অভ্যন্তরীণভাবে পিআই সংরক্ষণ করে / গণনা করে এমন কোনও প্রোগ্রাম ব্যবহার করতে পারবেন না (যা সাধারণত বেশিরভাগ ভাষায় উপলব্ধ উচ্চতর নির্ভুলতা "বিল্ট ইন" এফপি ডেটা টাইপ)।
মাত্তেও ইতালি

5
আমার সমাধান, দশক আগে এর আগে সাধারণত ভাষা গ্রন্থাগারগুলি সরবরাহ করার আগে, এটি যে ভাসমান পয়েন্টগুলি আমি ব্যবহার করতাম তার চেয়ে বেশি জায়গায় এটি মুখস্থ করা ছিল: 3.1415926535897932384626 সাধারণত ব্যবহারিক উদ্দেশ্যে যথেষ্ট পরিমাণে কাছাকাছি থাকে এবং এমনকি বেশিরভাগ অবাস্তব প্রকৃতিরও - আসল কিছু ওয়ার্ল্ড অন্যান্য সংখ্যার তুলনায় আরও ত্রুটি হতে চলেছে, এবং তাত্ত্বিকতার জন্য আমি সংখ্যার মানের চেয়ে প্রতীকী সাথে আটকে থাকি।
কেশলাম

3
@ সাইন্ট্যাক্সরর আগ্রহটি অপ্রাসঙ্গিক। আপনি যদি সেলিব্রিটিদের নগ্ন ছবি জিজ্ঞাসা করে কোনও প্রশ্ন পোস্ট করেন তবে এটি হাজার হাজার ভিউ এবং সম্ভবত সম্ভাব্যতাগুলি পেতে পারে। এটি বিষয়টিতে তৈরি করে না। এই প্রশ্নটি খুব বিস্তৃতের একটি সর্বোত্তম উদাহরণ। শুধু উত্তর সংখ্যা দেখুন। এছাড়াও নোট করুন যে ওপিতে এমন কোনও সীমাবদ্ধতা নির্দিষ্ট করে নি যা সম্ভাব্য উত্তরগুলিকে মূলত অসীম করে তোলে। যে কোনও ক্ষেত্রে, বন্ধ করা মোছা হচ্ছে না। প্রশ্ন এবং এর সমস্ত 23 টি উত্তর এখনও এখানে থাকবে। বন্ধ করার অর্থ হ'ল আর কোনও উত্তর গৃহীত হবে না। আমাদের কি প্রিন্ট করার জন্য আরও আরও কিছু উপায় দরকার?
টেরডন

উত্তর:


52

আপনি এই আদেশটি ব্যবহার করতে পারেন:

echo "scale=5; 4*a(1)" | bc -l
3.14159

যেখানে স্কেল হ'ল দশমিক বিন্দুর পরে অঙ্কের সংখ্যা।

তথ্যসূত্র: http://www.tux-planet.fr/calculer-le-chiffre-pi-en-ligne-de-commande-sous-linux/


12
মধ্যে অপেক্ষাকৃত ছোট সংস্করণ bashএবং অন্যান্য শাঁস এখানে স্ট্রিং সমর্থনকারী: bc -l <<< "scale=5; 4*a(1)"
পাবুক

2
আমি ভাবছি এটি কত সংখ্যায় যেতে পারে?
ডিসপ্লেনেম

4
@ ডিসপ্লেনাম scale=1000পরিবর্তে দ্রুত 999 সঠিক সংখ্যা দেয় (শেষ সংখ্যাটি 1 দ্বারা বন্ধ, যুক্তিযুক্ত যেহেতু আমরা পাই / 4 গণনা করছি এবং তারপরে 4 দিয়ে গুণ করব)। scale=4000কয়েক সেকেন্ডে 4000 সঠিক সংখ্যা দেয়। scale=10000আমার ধৈর্য ধারণের চেয়ে বেশি সময় নেয় তবে সম্ভবত 9999 বা 10000 সঠিক সংখ্যা দেয়।
hobbs 18

4
এটি আমার মেশিনে একটি ভুল ফলাফল দেয়, 'প্রতিধ্বনি "স্কেল = 5; 4 * এ (1)" | টাইপ করে বিসি-এল '3.14156 প্রদান করে, যখন শেষ সংখ্যাটি 9 দ্বারা হওয়া উচিত
জর্ডান বেন্টলে

1
@ জোর্দানবেন্টলি, আমি ফলাফলটির সঠিক বৃত্তাকার সহ একটি উত্তর যুক্ত করেছি ।
পাবউক

61

আপনি tex(1)ইনস্টল করা থাকলে:

tex --version | head -1 | cut -f2 -d' '

13
কেবল চালাক হওয়ার জন্য এটি প্রায়শই মূল্যবান। আপনি প্যাকেজ আপগ্রেড করার সময় এই আউটপুট পরিবর্তন হয়। আমরা কি এটি একটি বৈশিষ্ট্য বা বাগ হিসাবে বিবেচনা করব?
একটি সিভিএন

8
@ মাইকেলKjörling আসলে, এটি পাই এর আরও সুনির্দিষ্ট অনুমান হিসাবে পরিবর্তিত হয়।
অ্যাব্রিকাস

@ অ্যাব্রিকাস 2 হ্যাঁ, আমি জানি। টেক্সের সর্বশেষ সংস্করণটি version সংস্করণ π
একটি সিভিএন

30
@ ডেভিডরিচার্বি অল্প সংখ্যক একটি অতিরিক্ত অনুরোধের মাধ্যমে মুদ্রণ করা যেতে পারে cut। দীর্ঘ সময় অপেক্ষা করে আবার কমান্ড চালিয়ে আরও অঙ্ক মুদ্রণ করা যায়।
স্টিভেন ডি

1
@ রুসলান বাস্তবায়নের উপর নির্ভর করে। আমি এই বিশেষ ক্ষেত্রে আশা করব যে এটি "ঠিক" করা হবে "
থরবজর্ন রাভন অ্যান্ডারসন

23

নির্বিচারে নির্ভুলতার সাথে মুদ্রণের জন্য, আপনি bcএবং সূত্রটি ব্যবহার করতে পারেন pi = 4*atan(1):

# bc -l
scale=<your precision>
4*a(1)

2
অপশনটি সম্পর্কে মজার কিছু আছে scale, pi = 3.141592..তবে echo "scale=5; 4*a(1)" | bc -l => 3.14156আমি কি তবে এর সাথে দেখার আশা করব 3.14159?
fduff

7
scaleগণনার জন্য ব্যবহারের যথার্থতা নির্দিষ্ট করে, সুতরাং scale=5কোনও অপারেশন কোনও পারমাণবিক ক্রিয়াকলাপের জন্য পাঁচটি বেশি ভগ্নাংশের সংখ্যা ব্যবহার করবে না।
অ্যাব্রিক্স

@ ফডুফ, আমি ফলাফলটির সঠিক বৃত্তাকার সহ একটি উত্তর যুক্ত করেছি ।
পাবুক

20

আপনি যদি এমন কিছু চান যা π এর মান গণনা করতে পারে তবে কয়েকটি পন্থা রয়েছে। সম্ভবত সবচেয়ে সুস্পষ্ট সমাধান হ'ল pi(দেবিয়ান প্যাকেজ লিঙ্ক) এর মতো একটি তৈরি তৈরি প্যাকেজ ব্যবহার করা হবে , যা যদি দেবিয়ানের প্যাকেজের বিবরণটি বিশ্বাসযোগ্য হয় তবে এটি কেবলমাত্র স্মৃতি দ্বারা সীমাবদ্ধ একটি নির্বিচারে নির্ভুলতায় মান গণনা করতে পারে।

piআসলে এমন একটি উদাহরণ যা সিএলএন লাইব্রেরি সহ অন্তর্ভুক্ত রয়েছে (ক্লাস লাইব্রেরি ফর নাম্বার) । এটি উদাহরণস্বরূপ অ্যাপ্লিকেশনগুলিতে অন্তর্ভুক্ত রয়েছে যা পাই, ফিবোনাচি ইত্যাদির মতো নির্বিচারে দৈর্ঘ্যের সংখ্যা তৈরির জন্য সরঞ্জাম সরবরাহ করে থাকে। সিবিএন প্যাকেজগুলি ডেবিয়ান / উবুন্টুতে প্রাক-প্যাকেজযুক্ত পাওয়া যায় (এটি উপরে দেবিয়ান লিঙ্কটি নির্দেশ করছে)।

উদাহরণ
$ ./pi 10
3.141592653

$ ./pi 20
3.1415926535897932384

দ্রষ্টব্য: এই উদাহরণগুলির উত্সটি এখানে সিএনএন কোড বেসের উত্সে

অন্যান্য distros

ফেডোরা

ফেডোরায় আমাকে সোর্স টার্বল ডাউনলোড করতে হয়েছিল এবং এটি নিজেই তৈরি করতে হয়েছিল, তবে এটি সামান্য হৈচৈ করে তৈরি করে। যে কোনও কারণেই clnফেডোরার প্যাকেজটিতে কেবল গ্রন্থাগার অন্তর্ভুক্ত রয়েছে তবে ডেবিয়ান / উবুন্টু সংস্করণে (উপরে) যে উদাহরণগুলি পাওয়া যায় তা উপেক্ষা করে।

খিলান

আর্চ একই প্রোগ্রাম প্যাকেজ (ধন্যবাদ Amphiteót )।cln


হ্যাঁ, হেই আমি আমার মস্তকটিতে যা লিখেছিলাম তার মোট মূল্যটি।
ডিসপ্লেনেম

2
"মোট মান" ?? অর্থ কি...?
কাইল স্ট্র্যান্ড

2
@ ডিসপ্লেনাম বাকি উত্তরগুলি পড়ুন। piশোনার মতো উত্সর্গীকৃত প্রোগ্রামটি আপনি যা খুঁজছেন ঠিক তেমনই। আপনি pi 300উদাহরণস্বরূপ প্রথম 300 অঙ্ক মুদ্রণ করার মতো জিনিসগুলি করতে পারেন ।
টেরডন

3
@ কাইলসট্রেন্ড আমি এর একটি সত্যই দুর্দান্ত উত্তর খুঁজে পেয়েছি, যা এই মন্তব্যটি ধারণার পক্ষে খুব সংকীর্ণ। আরে, এটি কাজ করেছেন ফার্মাতে !
টেরডন

আমি কেন এটি দুটি ডাউনভোট পেয়েছি তা জানতে আগ্রহী। লোভযুক্ত লোকেরা কী সিদ্ধান্ত নেওয়ার আগে সিদ্ধান্তটি কার্যকর করেছিল না?
একটি সিভিএন

17

এক মিলিয়ন অঙ্কের জন্য আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন (3000 অঙ্কের জন্য এখানে):

curl --silent http://www.angio.net/pi/digits/pi1000000.txt | cut -c1-3000

2
এটির অতিরিক্ত সুবিধা রয়েছে যা ও (1) জটিলতার কাছে যুক্তিসঙ্গতভাবে হওয়া উচিত। বা হতে পারে এটি সর্বোপরি কোনও উপকার নয় ...
একটি সিভিএন

7
এছাড়াও, এটি বলা মুশকিল যে কোনও নেটওয়ার্কের ইন্টারঅ্যাকশনটি ব্যবহারিক বিশ্বে ও (1) সময়ের জটিলতা। : পি
হালোসঘস্ট

2
@ হ্যালসগোস্ট আমাদের উদ্দেশ্যে ( প্রতিটি বার পাই এর অঙ্কের এন ডিজিটের সাথে তুলনা করার জন্য), কোনও নেটওয়ার্কের মাধ্যমে নির্দিষ্ট সার্ভার থেকে একটি নির্দিষ্ট পরিমাণের ডেটা ডাউনলোড করা কার্যকরভাবে ও (1) হতে পারে , অন্যদিকে পাই এর অঙ্কন এন ডিজিট হওয়ার সম্ভাবনা রয়েছে কমপক্ষে ও (লগ এন) এর মতো কিছু এবং সম্ভবত উচ্চতর (আমি সেই আলগোরিদিমগুলির সাথে পরিচিত নই)। ডাউনলোডের শুরু করার জন্য উপাত্তের প্রকৃত ডাউনলোড ওভারহেডের তুলনায় উল্লেখযোগ্যভাবে বেশি সময় নিতে পারে, সুতরাং ডাউনলোডের সময়টি প্রাধান্য পায় এবং আপনি যুক্তিসঙ্গতভাবে নির্দিষ্ট ডেটা সংক্রমণ হারের ভিত্তিতে ও (1) এর আশেপাশে কোথাও পাবেন। সুতরাং ও (1)।
একটি সিভিএন

4
@ মাইকেলKjörling আপনি যখন ও (1) বলছেন তখন আপনার আসলে ও (এন) বোঝায় না? আপনার প্রয়োজনীয় সংখ্যার লিনিয়ারে ডাউনলোডের সময়, সুতরাং হে (এন)।
কোডসইনচাউস

1
@ কোডসইনচাওস না, ডাউনলোডের সময়টি ধ্রুবক (ধ্রুব ট্রান্সমিশন রেট হিসাবে দেওয়া হয়) কারণ আপনি অবিচ্ছিন্ন সংখ্যক (এক মিলিয়ন, এখানে) ডাউনলোড করছেন। যদি না (এই নির্দিষ্ট ক্ষেত্রে) কার্ল ডাউনলোড করার সময় মুদ্রণের জন্য যথেষ্ট স্মার্ট হয় এবং একবারে পাইপ বন্ধ হয়ে যায় বলে cutপ্রস্থান বন্ধ হয়ে যায়? যদি এটি হয় তবে আমি সম্মতি জানাই, এটি ও (এন) হবে।
একটি সিভিএন

15

অন্যান্য উত্তরগুলির মধ্যে কিছু আউটপুটের শেষ স্থানে ভুল সংখ্যা দেখায়। নীচে ব্যবহার করে উত্তরেরbc বিভিন্নতা রয়েছে তবে সঠিক গোলাকার ফলাফল রয়েছে। ভেরিয়েবলটিতে sউল্লেখযোগ্য অঙ্কের সংখ্যা রয়েছে ( 3দশমিক পয়েন্টের সামনে সহ )।

আধ রাউন্ড

$ bc -l <<< "s=5; scale=s+2; pi=4*a(1)+5*10^(-s); scale=s-1; pi/1"
3.1416

বৃত্তাকার নিচে (কাটা)

$ bc -l <<< "s=5; scale=s+2; pi=4*a(1); scale=s-1; pi/1"
3.1415

বৃত্তাকার ব্যাখ্যা

গোলটি সরাসরি ভিতরে সঞ্চালিত হয় bc। এতে কমান্ডের সীমাবদ্ধতা নেই printfযা সংখ্যার জন্য সি ভাষা doubleটাইপ উপস্থাপনা ব্যবহার করে যার প্রায় 17 টি উল্লেখযোগ্য সংখ্যার যথার্থতা রয়েছে। গোলটি সহ উত্তরটিprintf দেখুন ।

scale=s-1 কাটাতে অঙ্কের সংখ্যা নির্ধারণ করে। pi/1ছাঁটাই প্রয়োগ করতে ফলাফলকে 1 দ্বারা ভাগ করে। সরল piসংখ্যাটি ছাঁটাই করে না।

অর্ধেকটি গোল করে প্রথম অঙ্কে 5 যোগ করা দরকার যা কেটে যাবে (5 × 10) s ) যাতে অঙ্কের ক্ষেত্রে 5 এর সমান 5 এর বেশি হলে শেষ অঙ্কটি বৃদ্ধি পাবে।

Hobbs দ্বারা পরীক্ষা থেকে মনে হয় যে আরও তিনটি অতিরিক্ত সংখ্যা যা বৃত্তাকার / কাটা হবে ( scale=s+2) খুব দীর্ঘ সংখ্যার জন্যও যথেষ্ট।

এখানে স্ট্রিং

উপরের উদাহরণগুলি এখানে স্ট্রিংগুলি ব্যবহার করে যা উদাহরণস্বরূপ bash, kshএবং এ সমর্থিত zsh। যদি আপনার শেলটি এখানে স্ট্রিং ব্যবহার echoএবং পাইপ সমর্থন করে না :

$ echo "s=5; scale=s+2; pi=4*a(1); scale=s-1; pi/1" |  bc -l
3.1415

2
রাউন্ডিংয়ের উদ্দেশ্যে তিনটি অতিরিক্ত অঙ্ক গণনা করা আপনার মন্তব্যে দাবি হিসাবে "সঠিক রাউন্ডিং" নয়। প্রথমত, আপনার গণনার ত্রুটির উপর কোনও বাঁধা নেই। যদি এটি fdff দ্বারা দাবি করা হিসাবে শেষ স্থানে 3 টি ইউনিট দ্বারা ভুল হতে পারে, তবে কেন এটি শেষ স্থানে 1000 ইউনিট দ্বারা ভুল হবে না? দ্বিতীয়ত, "টেবিল প্রস্তুতকারকের দ্বিধা" দেখুন।
জটিল আকারে দেখুন

12

পার্ল এক লাইন ( বিগাইনাম ব্যবহার করে ):

perl -Mbignum=bpi -wle 'print bpi(NUM)'

যেমন

perl -Mbignum=bpi -wle 'print bpi(6)'
3.14159

10.000 সংখ্যার জন্য: পার্লে 8 মিনিটের কাছাকাছি, বিসি-তে 4 এরও কম। দ্রুততম নয়।
আইজাক

9

পাইথন 2 সহ:

$ python -c "import math; print(str(math.pi)[:7])"
3.14159

4
সম্পূর্ণতার জন্য, এই সমাধানটি পাইথন 2-নির্দিষ্ট।
হালোসগোস্ট

সম্পাদনার পরে, (..)পাইথন 2 এবং 3 এ এটির সাথে কাজ করে কেবল 12 টি সংখ্যা রয়েছে বলে মনে হয়।
অ্যান্থন

-C $ পাইথন "আমদানি গণিত; মুদ্রণ (ফরম্যাট (math.pi, '.400f'))" 3,1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Artem Shitov

1
@ArtemShitov - আমার খারাপ, আমদানি করার চেষ্টা করুন gmpy2 (যদি আপনি তা ইনস্টল করা আছে): python -c "import gmpy2; print(str(gmpy2.const_pi(8192))[:400])"। আরও সংখ্যার জন্য নির্ভুলতা বাড়ান ... যেমনpython -c "import gmpy2; print(str(gmpy2.const_pi(16384))[:4400])"
ডোন_ক্রিসটি

1
from mpmath import mp; mp.dps = 1000000 ; print(mp.pi)মিলিয়ন ডিজিটের জন্য আমি সবচেয়ে দ্রুত সেকেন্ড কয়েক সেকেন্ড খুঁজে পেতে পারি । মোটেও খারাপ নয় !!!
আইজাক

7

রুবি ব্যবহার:

require "bigdecimal"
require "bigdecimal/math"
include BigMath

BigDecimal(PI(100)).round(9).to_s("F")

3.141592654

1
একটি লাইনার:ruby -e 'require "bigdecimal"; require "bigdecimal/math"; include BigMath; puts BigDecimal(PI(100)).round(9).to_s("F")'

4

ব্যাশে:

$ read -a a <<< $(grep M_PIl /usr/include/math.h) ; echo ${a[3]} | tr -d L
3.141592653589793238462643383279502884

@ Amphiteóth afmtoditপ্রয়োজন groffইনস্টল করার জন্য। উবুন্টু (এবং স্বাদে) এ এটি মানক নয় । JFYI।
সিনট্যাক্সেরর

@ সাইন্ট্যাক্সেরর ধন্যবাদ, ভাল পয়েন্ট! আমি আমার উদাহরণ সরিয়েছি। আমার বক্তব্যটি তখনই পড়ল যখন এই এআইটি grepআমার সিস্টেমে ধ্রুবক অনুসন্ধান করে চলেছে এবং এটি একাধিক জায়গায় এটি পেয়েছিল। এই কারণেই এটি আমার জন্য +1!


3

এই প্রশ্নটি আমি কীভাবে মিস করেছি ...

আমার স্টাইল ওভারফ্লোতে কয়েক সপ্তাহ আগে পোস্ট করা আমার একটি পাইথন পাই প্রোগ্রামটি এখানে । এটি বিশেষত দ্রুত নয়, তবে এটি প্রচুর অঙ্ক করতে পারে । :) তবে, যেহেতু আমি সেই থ্রেডে উল্লেখ করেছি, আমি সাধারণত পাইথনের এমপিএমথ মডিউলটি স্বেচ্ছাচারিত নির্ভুল গাণিতিক জন্য ব্যবহার করি এবং এমপিএমথের পরিবর্তে দ্রুত পাই প্রস্তুতকারক রয়েছে।

যেমন,

time python -c "from mpmath import mp;mp.dps=500000;print mp.pi" >bigpi

real    0m4.709s
user    0m4.556s
sys     0m0.084s

5 সেকেন্ডের নীচে 500000 ডেসিমাল পাই খুব জঞ্জাল নয়, আইএমএইচও, এটি বিবেচনা করে কোনও একক কোর 2GHz প্রসেসর, 2 গিগা র‌্যাম এবং একটি প্রবীণ আইডিই ড্রাইভে লেখার জন্য কোনও মেশিনে চলছে।


from mpmath import mp; mp.dps = 1000000 ; print(mp.pi)মিলিয়ন অঙ্কের জন্য দুই সেকেন্ডের নীচে (পিপ 3 ইনস্টল এমপিএমথের পরে) চেষ্টা করুন । মোটেও খারাপ নয় !!!
আইজাক

2

আপনি যদি node.jsইনস্টল করে থাকেন তবে এটি আপনার জন্য পাই অনুসন্ধানে সেরা চেষ্টা করবে, যদিও এটির সেরাটি খুব ভাল নয়:

node -e 'for(a=0,b=4E8,m=Math,r=m.random;b--;)a+=(1>m.sqrt((c=r())*c+(d=r())*d));console.log(a/1E8)'

নমুনা আউটপুট:

3.14157749
3.1416426
3.14159055
3.14171554
3.14176165
3.14157587
3.14161137
3.14167685
3.14172371

4
খাটো node -e 'console.log(Math.PI)'তার সেরা থেকে কিছুটা ভাল।
chbrown

1
@ সিচব্রাউন যে ওপিগুলিকে "গুরুতর নয়" প্রয়োজনীয়তা পূরণ করে না।
পল

1
কি "গুরুতর না" প্রয়োজন? ওপি সবেমাত্র জানিয়েছে যে তারা মজা চাইছে এমন নয় যে তারা কোনও উত্তর "গুরুতর নয়" এমন উত্তর চায়। তার মানে কী? এরকম কিছু echo pie?
টেরডন

আমি এটি টাইপ করেছি কারণ যখন আপনি প্রশ্ন জিজ্ঞাসা করেন কখনও কখনও লোকেরা বলে যে এটি "এটি কোনও স্ক্রিপ্ট রাইটিং ফ্যাক্টরি নয়", তাই আমি বলেছিলাম যে এর কোনও প্রকৃত কারণ নেই, তাই আমি কেবল পিআই কীভাবে প্রিন্ট করতে হয় তা জানতে চাই।
ডিসপ্লেনেম

@ অ্যাম্ফাইটó আমার কম্পিউটারে চালাতে প্রায় 20 সেকেন্ড সময় নেয় আপনার কিছুটা সময় দেওয়ার দরকার হতে পারে।
পল

2

মন্টি কার্লো পদ্ধতি

উদাহরণস্বরূপ দেখুন, এই এই পদ্ধতি একটি ব্যাখ্যা জন্য।

আদেশ সহকারে

  • নির্বিচারে সঠিক নয়
  • দরকারী কিছুতে রূপান্তর করতে দীর্ঘ সময় নেয়

সুবিধাদি

মজা :-)

perl -Mbignum -E '
    for(0 .. 1_000_000){
        srand;
        $x=rand; # Random x coordinate
        $y=rand; # Random Y coordinate
        $decision = $x**2 + $y**2 <=1 ? 1:0; # Is this point inside the unit circle?
        $circle += $decision;
        $not_circle += 1-$decision;
        $pi = 4*($circle/($circle+$not_circle)); 
        say $pi
     }'

দ্রষ্টব্য: আমি প্রথমে এটি ব্যতীত চেষ্টা করেছি srandতবে এটি আটকে গেল 3.14এবং এর পরে অঙ্কগুলি দু'দিক থেকে যায়, কখনও রূপান্তরিত হয় না। এটি সম্ভবত কারণ, কিছুক্ষণ পরে পিআরএনজি নিজেই পুনরাবৃত্তি শুরু করে। এর ব্যবহার srandতা এড়াতে বা কমপক্ষে সিউডো-এলোমেলো ক্রমের সময়কাল দীর্ঘায়িত করবে। এটি সব অনুমান, সুতরাং আমি ভুল হলে আমাকে সংশোধন করতে দ্বিধা বোধ করবেন।


@ এম্ফাইটó সত্যিই নিশ্চিত নয় যে সেখানে কী চলছে। যদি এটি আমার পার্লটিকে v5.14.2 বলে সহায়তা করে। bignumপার্লের ক্রিয়াকলাপগুলির সাথে আমি সত্যিই পারদর্শী নই, আমি ভয় পাচ্ছি এবং উপরের প্রোগ্রামটির কোনও বিশেষ অংশের জন্য আমি জানি না যার জন্য আরও নতুন পার্লের প্রয়োজন। যাইহোক, এ সম্পর্কে আকর্ষণীয়টি হ'ল নিজেই অ্যালগরিদম। যদি এই পার্ল আপনার পক্ষে কাজ না করে তবে আপনার পছন্দের ভাষায় এটি প্রয়োগের চেষ্টা করুন।
জোসেফ আর।

1
@ আম্ফাইটó আমি দেখতে পাচ্ছি। সম্পাদনা আপনার সমস্যার সমাধান করে?
জোসেফ আর।

@ অ্যাম্ফাইটó ($x,$y,$circle,$not_circle)=(0,0,0);সমস্ত ভেরিয়েবলগুলি ব্যবহারের আগে সংজ্ঞায়িত করা হয়েছে তা নিশ্চিত করতে আপনি লুপের আগে যোগ করার চেষ্টা করতে পারেন।
জোসেফ আর।

@ আম্ফাইটó আমার ভুল উপরের প্যারেনগুলি হওয়া উচিত ছিল (0,0,0,0)
জোসেফ আর।

পুনরায় এটি /5.20.1: বুদ্ধি তৈরি করে কিন্তু তা দেখেনি! সত্যই ($x,$y,$circle,$not_circle)=(0,0,0,0)। এক বা দুই মিনিট পরে এটি পছন্দসই মানের চারদিকে ঝুলছে তখন আমি থামার আগে এটি 3.1409 এর অনেক কাছাকাছি চলে গেছে। আকর্ষণীয় এবং মজাদার! ধন্যবাদ!

2

আপনি পাই এর জন্য একটি স্পিগট অ্যালগরিদম ব্যবহার করতে পারেন। ডিক শীতকালীন এবং আচিম ফ্লেমেনক্যাম্পের নীচের সি প্রোগ্রামটি একবারে পাই এর প্রথম 15,000 অঙ্কের উত্পাদ করবে।

a[52514],b,c=52514,d,e,f=1e4,g,h;main(){for(;b=c-=14;h=printf("%04d",e+d/f))for(e=d%=f;g=--b*2;d/=g)d=d*b+f*(h?a[b]:f/5),a[b]=d%--g;}

প্রসঙ্গ: উইকি , এখানে এবং এখানে

1
আমি বোরউইন, বেইলি এবং প্লাফির লোগারিথমিক কনস্ট্যান্টগুলির জন্য স্পিগট অ্যালগরিদমকে পছন্দ করি তবে যাইহোক, এটি কোড গল্ফ নয়, তাই আমি কি আপনার কোডটির পুনরায় ফর্ম্যাট করে পাঠযোগ্যতার উন্নতি করতে পারি? আরও মনে রাখবেন যে বিপিপি-স্টাইলের অ্যালগরিদমগুলি কেবলমাত্র কমপক্ষে অতিরিক্ত মেমরি ব্যবহার না করেই 2 ভিত্তিক শক্তির পাইগুলির জন্য অঙ্কগুলি আউটপুট করতে পারে।
ফ্রানকি

@ ফ্রেঙ্কি কোড ফর্ম্যাট করে পোস্টের অর্থ বা উদ্দেশ্য পরিবর্তন করে? যদি তা না হয় তবে এটি ঠিক থাকতে হবে (এবং সম্পাদনাটি সর্বদা ফিরে ফেলা যায়)। আমি দেখতে পাচ্ছি না যে কোনও কোডকে ডিওবাফাস্যাক্ট করা স্পষ্ট করার চেয়ে অন্য কিছু করতে পারে।
11684

1
@ সাইন্ট্যাক্সেরর এটি থামানোর আগে ঠিক 15,000 অঙ্ক তৈরি করা। দ্বিতীয় লুপের আউটপুটটি পাই এর 4 টি অঙ্ক তৈরি করে এবং 145 দ্বারা 52514 এর রহস্য সংখ্যাটি হ্রাস করে The সমীকরণটি তখন 4 * (52514/14) হবে যা 15004 সমান ray অ্যারেতে শেষ 14 মানগুলি অবহেলা করা হবে কম টোকেন সুবিধা 15000. আমাদের সঠিক মূল্য পেতে
ড্যানিয়েল Henneberger

1
@ 11684 না, এটি কোডের অর্থ বা উদ্দেশ্য পরিবর্তন করে না। যাইহোক, আমি বুঝতে পেরেছি এই পাই একটি BBP ধাঁচের ছিপিবিশেষ অ্যালগরিদম, কিন্তু অন্য এক অন্য কেউ ইতিমধ্যে এখানে deobfuscated হয়েছে নয় stackoverflow.com/a/25837097
Franki

2

পিএইচপি

কয়েকটি উদাহরণ:

php -r "print pi();"
php -r 'echo M_PI;'
echo "<?=pi();" | php

আপনি যদি নির্ভুলতা পরিবর্তন করতে চান তবে চেষ্টা করুন:

php -d precision=100 -r 'echo pi();'

প্রায় 14 দশমিক সংখ্যার যথার্থতা সহ সর্বাধিক 8 1.8e308 সহ একটি ফ্লোটের আকার প্ল্যাটফর্ম নির্ভর a তবে সাধারণ মান (bit৪ বিট আইইইই ফর্ম্যাট)। [আরও পড়ুন]


আপনি যদি আরও সঠিক নির্ভুলতার সন্ধান করেন তবে কিছু প্রোগ্রামিং সমাধানের জন্য রোসটা কোড বা কোড গল্ফ এসই চেক করুন ।

সম্পর্কিত: এসআরএসইতে কমপক্ষে এক হাজার অঙ্কে পিআই গণনা করতে পারে এমন সফ্টওয়্যার


1

এখানে একটি স্ক্রিপ্ট রয়েছে যা ব্যবহারকারী দ্বারা নির্দিষ্ট করা সংখ্যার সংখ্যার ('সহ') সহ পাই মুদ্রণ করে।

pi.sh

#!/bin/bash
len=${1:-7}
echo "4*a(1)" | bc -l | cut -c 1-"$len"

আউটপুট

$ ./pi.sh 10
3.14159265

এবং ডিফল্ট মান সহ:

$ ./pi.sh
3.14159

আমি লোককে বিকল্প scaleহিসাবে ব্যবহার করতে দেখেছি bc, তবে আমার ক্ষেত্রে ( bc 1.06.95) এটি সঠিক মান আউটপুট দেয় না:

$ echo "scale=5;4*a(1)" | bc -l
3.14156

শেষ সংখ্যাটি লক্ষ্য করুন।


4
প্রশ্নটি বলে, "আমি এটি নির্দিষ্ট করতে চাই যে এটি কতগুলি সংখ্যা প্রিন্ট করে," যা কঠোরভাবে বলা, অস্পষ্ট - তবে আমি মনে করি যে কোনও উত্তর যুক্তির অধীনে আপনার উত্তরটি ব্যর্থ হয়েছে (কোনও প্রযুক্তিতে); আপনার ./pi.sh 10প্রিন্ট নয়টি অঙ্ক, প্রাথমিক গণনা 3। এছাড়াও, আপনি রাউন্ডিং ত্রুটির আঙুলটি দেখিয়ে দিচ্ছেন, তবে আপনার ./pi.sh 6আউটপুটগুলি 3.1415যা সর্বোত্তম নাও হতে পারে।
জি-ম্যান বলছেন 'পুনরায় ইনস্টল করুন মনিকা'

স্মৃতি থেকে, scale=Xবিকল্পটি bcসংখ্যাটি গোল করবে না, তবে কেবল এক্স-তম দশমিক অঙ্কে সংখ্যাটি কেটে দেবে।
সিনট্যাক্সেরর

1

আমি অ্যাবের উত্তর পছন্দ করি কিন্তু বিসি শেষ সংখ্যাটি কীভাবে পরিবর্তন করছিল তা পছন্দ করি না।

echo "scale=5; 4*a(1)" | bc -l
3.14156

সুতরাং আমি অঙ্কের সংখ্যা নির্ধারণ করতে স্কেল ব্যবহৃত মুদ্রণযোগ্য মুছে ফেললাম।

printf "%0.5f\n" $(echo "4*a(1)" | bc -l)
3.14159

আপনি কি খেয়াল করেছেন, 62 ডিজিটের স্কেল পরে, তারা সব 0 হয় যদিও মূল কমান্ডের সাথে এটি ঘটে না।

2
@ অ্যামফাইট, এটি কারণটির printfতুলনায় ভাসমান পয়েন্ট সংখ্যাগুলির উপর একটি গুরুতর সীমাবদ্ধতা রয়েছে bc। এগুলি সি ভাষার doubleধরণের দ্বারা প্রায় 17 ডিজিটের যথার্থতার সাথে প্রতিনিধিত্ব করে তাই 17 -এর পরে অ-শূন্য সংখ্যাও বোগাস! ------ ফলাফল সীমাবদ্ধ না করে সঠিক গোল করেprintf আমি একটি উত্তর যুক্ত করেছি । ------ এছাড়াও এই কমান্ডটি বিভিন্ন লোকেলের সাথে কাজ করে তা নিশ্চিত করার জন্য আপনাকে অবশ্যই এই জাতীয় কিছু করতে হবে: LC_ALL=C printf...
পাবুক

1

আপনার জীবনের জন্য যদি এই arctanজিনিসটি মনে না থাকে তবে কী করবেন ? অথবা ধরুন আপনি জানেন না যে এই ফাংশনটি বিদ্যমান রয়েছে bc, তবে এই সাধারণ বিভাগটি মুখস্থ করার চেষ্টা করুন:

echo "scale=6; 355 / 113" | bc
3.141592

শুধুমাত্র 6 ডিজিটের জন্য কাজ করবে তবে বৈজ্ঞানিক গণনার জন্য এটি ঠিক করবে।

আপনি যদি ভাবেন যে আপনি এই দুটি সংখ্যাও মনে রাখতে না পারেন, প্রথমে ডোনমিনেটরটি লিখুন, তারপরে অঙ্কটি লিখুন:

113 355

বা কেন হবে না

11 33 55

"ডাবল 1, ডাবল 3, ডাবল 5"। সমস্ত পরিসংখ্যান বিজোড়। গণনা করতে, 6-অঙ্কের নম্বরটি আবার অর্ধেকে বিভক্ত করুন, এবং বিভাজক আগে ডিনোমিনেটর এবং অঙ্কগুলি অদলবদল করুন। এটা সম্বন্ধে.


যতদূর আমি উদ্বিগ্ন হিসেবে আমি এটি 4 * arctan(1)যে 2 তিন-সংখ্যা সংখ্যার মনে রাখা অনেক সহজ ... আমি সহজে 335 পরিবর্তে 355, বা 133 পরিবর্তে 113. এর ব্যবহার করতে চাই
জন ডব্লু এইচ স্মিথ

ঠিক আছে, আমি মনে করি এটি ব্যক্তিগত পছন্দের বিষয় :) :) সহজেই (ল্যান্ডলাইন!) ফোন নম্বর মুখস্থ করতে পারে এমন লোকেরা (আমার মতো) ফোনগুলি কেবল একটি একক ফোন নম্বর হিসাবে দুটি নম্বর মুখস্থ করতে সক্ষম হবে। এটি স্কুলে যে সমস্ত লোকদের মনে হয়েছিল যে ত্রিকোণমিতি অবশ্যই দুষ্ট শক্তি দ্বারা তৈরি করা হয়েছে তাদের সহায়তা করবে।
সিনট্যাক্সেরর

1

এটি ধরে নেওয়া যেতে পারে যে ওপি মুদ্রণ করতে শেল কমান্ডটি একটি স্বল্প, সহজ মুখস্ত করতে আগ্রহী - তবে প্রশ্নটি সত্যই তা বলে না। এই উত্তরটি সেই অনুমানটিকে উপেক্ষা করছে এবং লিখিত হিসাবে কঠোরভাবে প্রশ্নের উত্তর দিয়েছে;

নগণ্য?

ইতিমধ্যে 18 টি উত্তর থাকলেও একটি পন্থা এখনও নিখোঁজ রয়েছে - এবং এতগুলি উত্তর দিয়ে, এটি ভাবতে পারে যে এটি
কেবল অনুপস্থিত: তুচ্ছ একটি: কীভাবে মুদ্রণ করবেন? শুধু ছাপুন π!

এমনকি এটি সম্পর্কে চিন্তা করাও এই পদ্ধতির পক্ষে খুব অকেজো বলে মনে হচ্ছে, তবে আমি এটি দেখাব যে এটির যোগ্যতা রয়েছে:

অনুকূল

আমরা সাধারণত π এর মান গণনা করতাম π সমাধানটিকে অনুকূলকরণ থেকে, মানকে প্রাক্কলিত করে রাখার বিষয়টি আমি দেখতে পাচ্ছি না - এটি একটি ধ্রুবক, কোনও সংকলক এটি করবে।

আমরা সর্বাধিক নির্ভুলতা অবধি π এর কয়েকটি সংখ্যা চাই want সুতরাং আমরা কেবল ধ্রুবকের উপসর্গটি পাঠ্য হিসাবে নিতে পারি:

echo 3.1415926535897932384626433832795 | cut -b -7
3.14159

নির্ভুলতার জন্য একটি সুস্পষ্ট যুক্তি সহ একটি বৈকল্পিক, উদাহরণস্বরূপ। নির্ভুলতার জন্য 5:

echo 3.1415926535897932384626433832795 | cut -b -$((2+5))
3.14159

সুবিধাদি

সর্বাধিক নির্ভুলতা অন্য যে কোনও একটি উত্তর ব্যবহার করে উপযুক্ত ধ্রুবক গণনা করে নির্বিচারে বেছে নেওয়া যেতে পারে। এটি কেবলমাত্র একটি কমান্ড লাইনের সর্বোচ্চ দৈর্ঘ্য দ্বারা সীমাবদ্ধ।
মানটি সন্ধানের জন্য এটিতে স্থির সময় জটিলতা রয়েছে।
এটি বাস্তবায়নের নিম্ন জটিলতার ভিত্তিতে সমস্ত সীমাবদ্ধতা এবং প্রতিবন্ধকতাগুলি সুস্পষ্ট করে তোলে।
এটি সম্পূর্ণ উপলব্ধ নির্ভুলতার (কোনও পেছন ছাড়াই 0) ধ্রুবকটি ফিরিয়ে দিয়ে সর্বাধিকের চেয়ে বৃহত্তর নির্ভুলতা পরিচালনা করে ।
সুতরাং এই সমাধানটি তুচ্ছ অবস্থায়, এর সুবিধাগুলি রয়েছে। উদাহরণস্বরূপ, এটি শেল ফাংশনে ব্যবহৃত হলে এটি কার্যকর হতে পারে।

যত্সামান্য

উপরের দ্রবণটির কার্যকারিতাও কোনও প্রক্রিয়া তৈরি না করেই অন্তর্ভুক্ত করা যেতে পারে cut(ধরে echoনেওয়া শেল বিল্টিন)। এটি printfকিছুটা
অস্পষ্টভাবে কমান্ডটি (সাধারণত একটি বিল্টিন) ব্যবহার করে : ধ্রুবকটি স্ট্রিং হিসাবে সম্পূর্ণরূপে হ্যান্ডেল করা হয় (বিন্যাসটি ব্যবহার করে %s), কোনও ভাসমান বিন্দু জড়িত নেই, সুতরাং এখানে সীমাবদ্ধতা প্রয়োগ হয় না floatবা doubleপ্রয়োগ হয় না। পালানোর
যথার্থ মান %s( 5নীচের উদাহরণে) মুদ্রণের জন্য স্ট্রিং উপসর্গের দৈর্ঘ্য নির্দিষ্ট করে - যা নির্ভুলতা। 3.অংশ printfএটা স্পষ্টতা গণনার বার করার জন্য বিন্যাস।

$ printf "3.%.5s\n" 1415926535897932384626433832795 
3.14159

পৃথক যুক্তি হিসাবে নির্ভুলতার সাথে বিকল্প:

$ printf "3.%.*s\n" 5 1415926535897932384626433832795 
3.14159

অথবা কিছুটা বেশি পঠনযোগ্য (এর মধ্যে স্পেসটি নোট করুন 3.এবং 14159...এগুলি পৃথক যুক্তিযুক্ত):

$ printf "%s%.5s\n" 3. 1415926535897932384626433832795
3.14159

দ্রুত

ব্যবহারের বৈকল্পিকটি printfখুব দ্রুত হতে পারে বলে প্রত্যাশা করা যেতে পারে: কারণ printfসাধারণ শেলগুলির মতো শেল বিল্ট ইন bashএবং zshএটি কোনও প্রক্রিয়া তৈরি করে না।
এছাড়াও, এটি কোনও ধরণের ভাসমান পয়েন্ট সম্পর্কিত কোডকে স্পর্শ করে না, তবে কেবলমাত্র বাইট অ্যারেগুলির ম্যানিপুলেশন (স্পষ্টভাবে মাল্টিবাইট অক্ষর নয়)। এটি সাধারণত দ্রুত হয়, প্রায়শই ভাসমান পয়েন্ট ব্যবহারের চেয়ে অনেক দ্রুত faster

মুদ্রণযোগ্য সামঞ্জস্য

প্রায়শই, সেখানে কারণে প্রতিস্থাপন করতে হয় printfদ্বারা /usr/bin/printfগ্যারান্টি দৃঢ়তা বা সামঞ্জস্য করতে। এই ক্ষেত্রে, আমি মনে করি আমরা বিল্টিনটি ব্যবহার করতে পারি - যা গুরুত্বপূর্ণ, কারণ /usr/bin/printfকোনও প্রক্রিয়া জোর করে "দ্রুত" সুবিধা হ্রাস করে। সামঞ্জস্যের
সাথে একটি সাধারণ সমস্যা printfহল লোকেলের উপর নির্ভর করে সংখ্যা আউটপুট ফর্ম্যাট। লোকাল সেটিং এর উপর ভিত্তি করে .সংখ্যার জন্য পৃথককরণ পরিবর্তন করা যেতে পারে ,; তবে আমরা সংখ্যা ব্যবহার করি না, কেবল একটি স্ট্রিং ধ্রুবক রয়েছে যা আক্ষরিক থাকে .- লোকেল দ্বারা প্রভাবিত হয় না।
স্টাফেনচাজেলাস তা উল্লেখ করেছেনprintf %.5s ভিন্নভাবে কাজ করেzshঅক্ষর গণনা করে, যথারীতি বাইট নয়। ভাগ্যক্রমে, আমাদের ধ্রুবকগুলি নিম্ন এএসসিআইআই-রেঞ্জের কেবলমাত্র অক্ষর ব্যবহার করে, যা UTF-8ইউনিকোডের জন্য সাধারণ এনকোডিং ব্যবহার না করে আমরা কোনও নির্দিষ্ট প্রস্থের এনকোডিং না করে যতক্ষণ না কোনও প্রাসঙ্গিক এনকোডিংয়ে অক্ষর অনুসারে এক বাইট দ্বারা এনকোড থাকে ।


দ্রষ্টব্য যে printf %.5szsh ভিত্তিতে গৃহস্থালি (বাইট নয়) (বুদ্ধিমানভাবে, তবে পসিক্সের বিপরীতে)। ksh93এর %.5Lsগ্রাফেম ভিত্তিক।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.