PDA

View Full Version : سوال: عدد پی



<Mahdis>
شنبه 22 آذر 1393, 18:26 عصر
سلام
من یه کد نوشتم برای محاسبه عدد پی ( با استفاده از دایره و مربع )
اما به من فقط تا 15 رقم اعشار رو نشون میده ! چون double هس !
ولی من میخوام تا 100 رقم اعشار رو بهم نشون بده ....
برای اینکار باید با استفاده از الگوریتم تقسیم مقدار صحیحو بریزم تو یه آرایه و مقدار اعشاریو تو یه آرایه دیگه ولی نمیدونم چجوری باید تو برنامم پیاده سازیش کنم ...
ممنون میشم اگر کمکم کنید .

محمد فدوی
دوشنبه 24 آذر 1393, 20:02 عصر
سلام. من اطلاعات خیلی زیادی در این زمینه ندارم... و حتما کتابخونه های آماده برای اینکار موجوده.
اما راهی که به ذهنم میرسه استفاده از BigInteger هاست (برای آشنایی و مثال اینو (http://www.tutorialspoint.com/java/math/java_math_biginteger.htm) ببینید). مثلا برای ذخیره کردن عدد 3.1415926535897932384626433 به جای استفاده از یه double میتونید از یه BigInteger و یه int برای ذخیره کردن تعداد ارقام اعشار استفاده کنید. یعنی عدد 31415926535897932384626433 رو توی شیء BigInteger و عدد ۲۵ رو توی اون عدد int ذخیره کنید.

اگه الگوریتمتون بتونه جوری تغییر کنه که از اول از BigInteger استفاده کنه خیلی خوبه در غیر اینصورت یکم سخت میشه کار.

<Mahdis>
چهارشنبه 26 آذر 1393, 22:25 عصر
خیلی ممنون بابت راهنماییتون خوشبختانه این برنامه رو با BigDecimal تونستم تا 100 رقم نشون بدم ولی
خیلی تلاشم بر اینه که بتونم با الگوریتم تقسیم کار بیگ دسیمال رو انجام بدم و همونطور که گفتم قسمت صحیح رو بریزم تو یه آرایه و همچنین اعشار رو تو یه آرایه دیگه ....
خوشحال میشم اگر در این راستا بتونین راهنماییم کنین ....
تشکر

mah.shahani10
چهارشنبه 10 دی 1393, 09:33 صبح
منم خیلی دارم سعی می کنم بفهمم چطوری میشه این کارو با آرایه انجام داد...نمی تونم پیاده سازیش کنم:ناراحت::ناراحت::ناراحت:

محمد فدوی
پنج شنبه 11 دی 1393, 00:44 صبح
برای این‌کار باید از ساختمان‌های داده‌ای مثل یک List از Byteها استفاده کنید. برای ذخیره‌ی یه عدد بزرگ توی یه ساختمان داده (یا آرایه) که مشکلی نداریم؛ اون رو بایت به بایت توی درایه‌های ساختمان داده‌ی مورد نظرمون می‌ریزیم.
اما برای انجام اعمال ریاضی روی دو عدد از این نوع، مثلا برای جمع، همون جمعی که ما روی کاغد انجام می‌دیم رو برای این عدد شبیه‌سازی میکنیم؛ با این تفاوت که اینجا هر رقم از عدد یه درایه از ساختمان داده‌ی ماست، یا به بیان ساده هر رقم از این عدد ما یه Byte هست. (فرض می‌کنیم عددمون در مبنای ۲۵۶ قرار داره)

شاید بد نباشه با روش انجام اعمال ریاضی مثل جمع توی CPU آشنا بشید.
موفق باشید.