PDA

View Full Version : سوال: محدوده double - محاسباتی چون فاکتوریل



rroona
شنبه 30 مرداد 1389, 05:00 صبح
سلام
متغیری از نوع دابل چند عدد رو در خود جای میده؟
حقیقتش من وقتی میخوام نتیجه فاکتوریل عدد 25 رو ببینم ، عدد درستی رو نشون نمیده. انگار که کم میاره
1.5511210043331E+25
باید چیکار کنم
ممنون

mmd2009
شنبه 30 مرداد 1389, 05:47 صبح
با سلام

یک نمونه مثال برات زدم کارت راه میفته.



long fact = 1;
int i = 1;
while (i <= Int32.Parse(txtNumber.Text))
{
fact = fact * i;
i++;

}
MessageBox.Show(fact.ToString());

salehbagheri
شنبه 30 مرداد 1389, 06:56 صبح
با سلام

یک نمونه مثال برات زدم کارت راه میفته.

میتونم بپرسم چه ارتباطی با سوال داشت؟


حقیقتش من وقتی میخوام نتیجه فاکتوریل عدد 25 رو ببینم ، عدد درستی رو نشون نمیده. انگار که کم میاره

میتونید از نوع داده ای BigInteger استفاده کنید.

فعلا که محدوده مشخصی براش تعیین نشده و قادره تا هزاران رقم رو در خودش جای بده!

mmd2009
شنبه 30 مرداد 1389, 12:50 عصر
خب عزیزم اون چیزی که ایشون خواستن این بود که فاکتوریل عدد 25 رو بتونن حساب کنن.

اون مثالی که من زدم فاکت عدد 25 رو میتونه بگیره.

--------------------------------

اینم صفحه ای که این دوستمون اشاره کردن میتونید برید اطلاعاتی بدست بیارید.

http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

rroona
شنبه 30 مرداد 1389, 21:28 عصر
قطعه کدی که دوست عزیزم با long نوشته بود رو امتحان کردم ، کمی بهتر شد اما باز هم برای محاسبه فاکتوریل عددی مثل 100 نتیجه درستی نمیده؟
من هنوز جواب سوالمو نگرفتم
ممنون

rroona
شنبه 30 مرداد 1389, 21:37 عصر
لطفا یه سری به اینجا بزنید
http://www.numberempire.com/factorialcalculator.php
نتیجه فاکتوریلی که تو این سایت حساب میشه با نتیجه فاکتوریلی که قطعه کد mmd2009 (http://www.barnamenevis.org/forum/member.php?u=115786) عزیز تولید میکنه در یه جاهایی با هم اختلاف داره
چرا اینجوریه؟
جالبه که این سایت فاکتوریل عدد 5000 رو هم حساب میکنه.
به نظر شما از چه تکنیکی استفاده کرده؟

mmd2009
شنبه 30 مرداد 1389, 22:06 عصر
برای اوردن bigInteger باید فضای نام using System.Numeric; رو بیارید

توضیحات لازم تو همون لینکی که دادم بالا هست.

Sajjad.Aghapour
شنبه 30 مرداد 1389, 22:47 عصر
دقت کنید که BigInteger در NET 4.0. معرفی شده است...

اون صفحه ای که شما معرفی کردید یک صفحه php هستش(کلا در لینوکس هم با دستور factor این کار را به راحتی تا هر مقدار که بخواهید میتوانید انجام بدید)....

mmd2009
شنبه 30 مرداد 1389, 22:57 عصر
یک جایی نوشته بود که در 3.5 هست. من تو خود همین سایت خوندم. اسمبل core این کارو میکنه.

rroona
یک شنبه 31 مرداد 1389, 16:01 عصر
من هنوز جواب نگرفتم
یعنی متغیری در دات نت 3.5 وجود نداره که ما مثلا یه عدد 50 رقمی رو بتونیم توش نگهداری کنیم؟
--------------------
من هنوز جواب سوالمو نگرفتم
یعنی در دات نت 3.5 متغیری وجود نداره که ما بتونیم مثلا یه عدد 50 رقمی رو توش نگهداری کنیم؟؟؟؟؟؟

Salar Ashgi
یک شنبه 31 مرداد 1389, 16:27 عصر
در دات نت 3.5 این قابلیت وجود ندارد و فضای System.Numerics از کتابخانه های دات نت 4.0 محسوب میشه
یه عکس از C# 4.0 با پیاده سازی تابع فاکتوریل با Big Integer و محاسبه فاکتوریل عدد 100 :

http://www.barnamenevis.org/forum/attachment.php?attachmentid=54562&d=1282478304

http://www.barnamenevis.org/forum/attachment.php?attachmentid=54563&d=1282478304

البته اگه خودتون بخواین میتونید توسط لیست پیوندی تو دات نت 3.5 کلاس اعداد بزرگ رو پیاده سازی
کنید ولی خوب در هر صورت به بهینگی و کارایی بالای کلاس دات نت 4.0 نخواهد رسید ...