View Full Version : مشکل محدوده int
redflight
دوشنبه 13 مرداد 1393, 19:42 عصر
سلام
من یک آرایه از نوع char می خواستم با سایز پویا، و هرخانه اش هم سایزش پویا باشه با این سایز ها: خود آرایه سایز n*n و هر خانه سایز L
من اینطور تعریف کردم:
char **a;
a1 = new char*[n*n];
for(int i=0; i<n*n; i++)
a1[i] = new char[L+1];
این مشکلی نیست مشکل من اینه که از یه جایی توی این کد من سایز n*n بیشتر از محدوده ی int می شه! من چطور این مشکل رو رفع کنم ؟
وقتی int n رو هم به double n تغییر می دم ارور می ده می گه باید اونجا که n*n نوشتم یا int باشه یا Enum
البته double هم یه سری محدودیت داره بازم اما خب نسبت به int بهتره
شما چه راهی رو پیشنهاد می کنین؟
چطور Double کنم
یا چطور این مشکلم رو حل کنم؟
می شه لطفا کمکم کنین؟
amirtork
دوشنبه 13 مرداد 1393, 19:50 عصر
فکر کنم اگر از long long int استفاده کنید مشکلتون رفع بشه، اگر امتحان کردید دیدید نشد، بگید که در مورد یه راه حل اساسی فکر کنیم.
redflight
دوشنبه 13 مرداد 1393, 20:12 عصر
نشد
راستش ارور نداد
اما برای همون حداکثر محدوده int که جواب می داد دیگه نمی ده!
amirtork
دوشنبه 13 مرداد 1393, 21:28 عصر
سلام
اصولا unsigned long long int باید جواب میداد!
راه دیگه ای که در حال حاضر به نظرم میشه ازش استفاده کرد، با توجه به اینکه نتونستید از ULL استفاده کنید، استفاده از unit64_t هست، حداکثر عددی که unit64_t میتونه نگهداری کنه رو میتونید با استفاده از کد زیر بدست بیارید:
#include <numeric>
#include <iostream>
#include <cstdint>
using namespace std;
int main()
{
cout <<numeric_limits<uint64_t>::max() <<endl;
retunrn 0;
}
که خروجی اون میشه:
18446744073709551615
rahnema1
دوشنبه 13 مرداد 1393, 21:43 عصر
به میزانی که سیستم قادره حافظه در اختیار شما قرار بده دقت کنید در ماشین 32 بیتی شما فوق فوقش می تونید تا 4 گیگ حافظه اشغال کنید ( که عملا کمتر از این اتفاق می افته)
حداکثر int میشه 2 گیگ
اگه بذارید unsigned int حداکثر تا 4 گیگ (به صورت تئوری) میشه استفاده کرد
amirtork
دوشنبه 13 مرداد 1393, 22:12 عصر
به میزانی که سیستم قادره حافظه در اختیار شما قرار بده دقت کنید در ماشین 32 بیتی شما فوق فوقش می تونید تا 4 گیگ حافظه اشغال کنید ( که عملا کمتر از این اتفاق می افته)
حداکثر int میشه 2 گیگ
اگه بذارید unsigned int حداکثر تا 4 گیگ (به صورت تئوری) میشه استفاده کرد
Wow!
من فکر میکردم هر متغیری یک حداکثر مقداری داره! مثلا اینتیجر هشت بیت جا میگیره! ولی شما میگید میشه تا دو گیگابایت!!!! حجم برای یه متغیر اینتیجر استفاده کرد!
برای امتحان اینکه میشه تا دوگیگابایت حافظه اشغال کرد با اینتیجر، روشی هست؟
#target
دوشنبه 13 مرداد 1393, 23:34 عصر
نگفتن 4 گیگ !!
تا 4 گیگ میشه آدرس داد
و ی برنامه User Mode حداکثر دو گیگ فضا (کمتر البته) استفاده کنه برای 32 بیتی ها
الان n*n بیشتر از محدوده int بشه مگه میشه اونقد زیادو تو حافظه جا داد !!!
redflight
سه شنبه 14 مرداد 1393, 10:09 صبح
من مثلا یک عدد 1000 رقمی می خوام! خب اونوقت چکار کنم؟
redflight
سه شنبه 14 مرداد 1393, 10:26 صبح
حالا 100 رقمی چی؟
rahnema1
سه شنبه 14 مرداد 1393, 11:05 صبح
حالا 100 رقمی چی؟
کتابخانه gmplib برای محاسبه اعداد بزرگ هست که به زبان سی نوشته شده از این آدرس بگیرید:
https://gmplib.org
البته نه اونقدر بزرگ که بیشتر از حافظه کامپیوتر را بخواد اشغال کنه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.